代码之家  ›  专栏  ›  技术社区  ›  Jacob G

装配连接器错误排除,C++,VS 2005

  •  0
  • Jacob G  · 技术社区  · 15 年前

    将Visual Studio 2005与最新的Service Pack一起使用。

    我有一个有38个项目的托管C++解决方案(我刚刚继承)。当我构建这个解决方案时,我从汇编链接器接收到以下错误:

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

    我对如何解决或解决这个问题有点茫然。构建输出中的周围步骤包括:

    1. 正在写入资源文件…完成。
    2. 正在编译资源…
    3. 链接…
    4. 正在创建库[路径]\[文件名].lib和对象[路径]\[文件名].exp
    5. 正在创建资源卫星…
    6. 此处出错。

    只有先清除或不清除解决方案时,构建与重建与项目之间的结果没有区别。而且,在所有情况下,都会创建此项目的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" 
    
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Joshua    15 年前

    尝试直接导航到问题文件,看看是否可以自己删除它。如果不能,请重命名它(是的,有时甚至可以重命名正在使用的文件),然后重试生成。有时 某物 保持文件打开,即使清除也无法删除。

    如果上述方法无效,请尝试在反病毒软件的构建目录中添加一个异常。我在赛门铁克端点保护方面遇到了这个问题。一旦文件被写入并关闭,它就会打开它在下一步编辑该文件时进行扫描。不用说,该文件“正在使用”并导致生成失败。

        2
  •  0
  •   Michael Burr    15 年前

    这似乎是一个与VS2005相对常见的问题,但MS将此问题作为非repro解决(我怀疑此问题与安装在系统上的其他应用程序/驱动程序的某些交互有关,而MS在其测试台上没有这些应用程序/驱动程序)。

    我听说人们通过更改项目设置中的输出目录来解决这个问题,但我不确定解决方法的持久性和可靠性。另一件要尝试的事情(如果可能的话,而且还没有完成)是更新到sp1或vs2008。

        3
  •  0
  •   Jacob G    14 年前

    最后,在使用外部资源编译器(即resgen)时,将其跟踪到项目文件中XML过滤器集合的顺序。

    失败的项目在其项目文件中有:

    <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>
    

    成功了。