2009-09-29 82 views
0

使用Visual Studio 2005与最新的服务包。故障排除集链接错误,C++,VS 2005

我有38个项目(即我刚刚继承。)当我建立这个解决方案,我是从集链接收到以下错误的托管C++解决方案:

“错误AL1019:元数据失败同时创建程序集 - 该进程无法访问该文件,因为它正在被另一个进程使用。“

我有点不知所措如何解决或解决此。构建输出中的周围步骤如下:

  1. 写入资源文件...完成。
  2. 编译资源...
  3. 链接...
  4. 创建库[路径] \ [文件名] .LIB和对象[路径] \ [文件名] .EXP
  5. 创建资源卫星...
  6. 此处发生错误。

Build或Rebuild与Project Only之间的结果没有区别,有或没有首先清理解决方案。而且,在所有情况下,都会创建该项目的DLL,EXP,ILK,LIB和PDB文件。

我比这个特殊的项目被类似的结构,并没有看到明显的差异溶液中的其它项目。我查看了在构建过程中生成的批处理文件和临时rsp文件,并且没有发现任何可跳转的文件。

我目前的猜测是,链接器试图将中间清单文件嵌入到程序集中,而其他东西仍在尝试写入相同的中间清单文件(或程序集本身)。虽然,我很善良在这一点上猜测。

如果有人知道如何解决这个或有任何见解,以什么其他考虑,试图解决我会非常感激。谢谢。

我生成日志的最后的消毒版本,如果它可以帮助:

 

    /ASSEMBLYRESOURCE:".\Debug\[Namespace].[ErringProject].dll.licenses" 
    ] 
    Creating command line "link.exe @[Path]\[ErringProject]\Debug\RSP00030A20042852.rsp /NOLOGO /ERRORREPORT:PROMPT" 
    Creating temporary file "[Path]\[ErringProject]\Debug\RSP00030B20042852.rsp" with contents 
    [ 
    /out:"[OutputPath]\[Namespace].[ErringProject].dll" 
    /c:Run 
    /template:"..\..\..\..\..\Run\[Namespace].[ErringProject].dll" 
    /embed:".\Debug\[Namespace].StringsNT.resources" 
    /embed:".\Debug\[Namespace].Strings.resources" 
    ] 
    Creating command line "al.exe @[Path]\[ErringProject]\Debug\RSP00030B20042852.rsp /nologo" 
 

回答

0

使用外部资源编译器时,最终跟踪下来到项目文件中的XML过滤器集合的顺序(即RESGEN)

发生故障的项目必须在其凸出文件:

<files> 
    <Filter Name="Header Files" ...> 
     ... 
    </Filter> 
    <Filter Name="Resource Files" ...> 
     ... 
    </Filter> 
    <Filter Name="Source Files" ...> 
     ... 
    </Filter> 
</files> 

切换,为:

<files> 
    <Filter Name="Header Files" ...> 
     ... 
    </Filter> 
    <Filter Name="Source Files" ...> 
     ... 
    </Filter> 
    <Filter Name="Resource Files" ...> 
     ... 
    </Filter> 
</files> 

的伎俩。

2

尝试直接导航到该问题的文件,看看你可以自己删除。如果你不能,重命名它(是的,有时你可以重命名文件,即使它们正在使用中)并再次尝试构建。有时东西保持打开文件,甚至干净的无法删除它。

如果上述不起作用尝试在您的防病毒软件添加一个例外,你的build目录。我遇到了Symantec Endpoint Protection的这个问题。只要文件被写入并关闭,当下一步是编辑该文件时,就会打开它并将其正确扫描。不用说,该文件“正在使用”并导致构建失败。

+0

如果文件被阻止(“使用”),你不能重命名或删除它,你仍然可以找出哪个进程是使用ProcessExplorer [http://technet.microsoft.com/en-访问文件us/sysinternals/default.aspx](查找句柄或DLL)。 – MP24 2009-09-29 16:27:57

+0

不幸的是,没有告诉我这* *文件正在使用中。我确保在构建之前清理所有输出,并在出错时使用进程资源管理器来查看是否有临时或最终输出文件有锁定 - 它们不会。 – 2009-09-29 16:29:35

+0

防病毒更改也不会造成影响。 – 2009-09-29 16:33:10

0

这是一个似乎与VS2005 relativelty常见的一个问题,但MS关闭问题作为非摄制(我怀疑问题是连接与其他应用程序/驱动程序安装MS没有在系统上的一些互动在他们的测试床上)。

我听说人们通过改变项目设置输出目录解决该问题的工作,但我不知道如何永久的或可靠的解决方法是。另一个尝试(如果可能的话,还没有完成)是更新到SP1或VS2008。

+0

不幸的是,我使用的是最新的Service Pack,无法升级。更改输出目录不起作用。 – 2009-09-29 19:21:59

+0

如果您有任何支持事件与MS(如果你有一个MSDN订阅,你可能做的),我会说这是值得呼吁那些之一。 – 2009-09-29 20:03:30