我已经安装了Visual Studio 2012发布预览版,它看起来很好,但现在当我尝试使用Visual Studio 2010编译c++项目时,我得到了以下错误消息:

链接:致命错误LNK1123:转换到COFF期间失败:文件无效或损坏

我不是100%确定,但这似乎与项目中有.rc(资源)文件有关。

我尝试从添加/删除程序和重新启动修复Visual Studio 2010,但这没有效果。

如果我使用Visual Studio 2012 RC来编译c++项目,而设置使用Visual Studio 2010工具集,我也会得到相同的错误。升级到Visual Studio 2011工具集可以解决这个问题(当然,我不想对产品代码这样做)。

更新:我已经卸载了Visual Studio 2012,重新启动,问题仍然存在!的帮助!


当前回答

我将启用增量链接设置为“No (/ Incremental: No)”,但它对我不起作用。

接下来我改变了:

Project Properties 
   -> Configuration Properties 
       -> General
          -> Platform Toolset -> "Visual Studio 2012 (v110)"

这对我来说很有用:)

其他回答

如果禁用增量链接对您不起作用,并且关闭“嵌入清单”也不起作用,那么在您的路径中搜索多个版本的cvres .exe。

通过调试/VERBOSE链接器选项,我发现链接器正在写错误消息时,它试图调用cvtres,它失败了。

结果在我的路径中有这个实用程序的两个版本。一个在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe,另一个在C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe。VS2012安装后,VS2010版本的cvres .exe将不再工作。如果这是路径中的第一个文件,并且链接器决定它需要将.res文件转换为COFF对象格式,则链接将使用LNK1123失败。

(非常令人恼火的是,错误信息与实际问题无关,但这对微软产品来说并不罕见。)

只需删除/重命名该实用程序的旧版本,或重新安排PATH变量,以便将正常工作的版本放在前面。

注意,对于x64工具构建,您可能还必须检查C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64,其中有另一个cvres .exe。

这是因为。net Framework 4.5正在取代。net Framework 4.0。 我卸载了几次Visual Studio 2010,但都没有成功。当我删除。net Framework 4.5并重新安装Visual Studio 2010时,它运行得很好。

请参见完全卸载Visual Studio 11来重新安装。

根据MSDN论坛的这个帖子:VS2012 RC安装破坏VS2010 c++项目,简单地说,从VS2010 SP1中获取cvres .exe

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

或从VS2012

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

并将其复制到VS2010 RTM安装中的cvres .exe(没有SP1的那个)

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

这样,您就可以有效地使用cvres .exe的修正版本11.0.51106.1。

在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\ cvres .exe中的64位版本中重复相同的步骤。

这个解决方案是VS2010 SP1安装的替代方案——在某些情况下,你根本无法安装SP1(例如,如果你需要支持pre-SP1版本)。

我最终通过完全卸载VS2012 RC解决了这个问题,然后完全卸载VS2010,然后重新安装VS2010。

花了很长时间,但我现在又可以在VS2010中编译c++项目了。

我通过以下方法解决了这个问题:

在命令提示符中,输入msconfig并按enter。 单击“服务”页签。 寻找“Application Experience”并打勾(即选择此选项以启用)。 单击OK。并在必要时重新启动。

因此,这个问题将永远存在。在没有任何干扰的情况下随机构建和调试你的c++项目。