我已经安装了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,重新启动,问题仍然存在!的帮助!


当前回答

我使用Windows SDK进行核心Win32编程,由于“未知的”原因安装了。net 4.5。我已经卸载了它,并安装了4.0,就像之前的答案一样,是的,它也适用于我。

我只是大吃一惊,我不得不使用无用的。net框架来使用SDK构建Win32应用程序。

其他回答

+1用户短的答案,为我工作!

我试图用msbuild /v:diag做一些调试,我看到msbuild试图在可执行文件中嵌入一个清单,使用< someename >.dll.embed.manifest。链接器命令行上的Res,其中是一个从< someename >.dll.embed.manifest构建的资源文件。但是清单文件是一个空的Unicode文本文件。(即,带有Unicode 0xFEFF前缀的双字节文件)

因此,根本问题似乎与没有生成清单文件有关,或者在应该使用< someename >.dll.intermediate.manifest时使用了清单文件有关。

另一个解决方案似乎是关闭“嵌入清单”选项下的属性,清单工具,输入和输出。

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

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

我尝试了几次,最终通过卸载VS2010解决了这个问题。我想我没有卸载所有的文件,这就是为什么它不能工作的第一次。

在VS2012的安装中,据说如果你有VS2010 SP1,你不能在两个程序中工作在同一个项目上。建议只有一个程序。

谢谢!

这个MSDN线程解释了如何修复它。

总结:

或者通过转到禁用增量链接 项目属性 ->配置属性 >链接器(通用) ->启用增量链接-> "No (/ Incremental: No)" 或安装VS2010 SP1。

编辑(@CraigRinger):注意,安装VS 2010 SP1将删除64位编译器。你需要安装vs2010 SP1编译器包来取回它们。

这将影响微软Windows SDK 7.1的Windows 7和。net 4.0以及Visual Studio 2010。

在启用增量链接->“No (/ Incremental: No)”后,它不为我工作,但在我删除rc文件后,它为我工作。