我已经安装了Visual Studio 2012 Release Preview,它看起来很好,但是现在当我尝试使用Visual Studio 2010编译C项目时,我收到以下错误消息:
LINK:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏
我不是100%肯定这一点,但它似乎与其中包含 .rc
(资源)文件的项目有关 .
我尝试从添加/删除程序修复Visual Studio 2010并重新启动,但这没有任何效果 .
如果在设置为使用Visual Studio 2010工具集时使用Visual Studio 2012 RC编译C项目,也会出现相同的错误 . 升级到Visual Studio 2011工具集可以解决问题(当然我不想为 生产环境 代码执行此操作) .
更新:我已卸载Visual Studio 2012,重新启动,问题仍然存在!救命!
26 回答
更新.NET后我遇到了同样的问题:我首先卸载了.NET框架,从visualstudio.com下载了visual studio并选择了"repair" .
NET框架是随视觉工作室自动安装 - >现在它工作正常!
我将 Enable Incremental Linking 设置为 "No (/INCREMENTAL:NO)" 并且它对我不起作用 .
接下来我改变了:
它对我有用:)
1到用户的缩写an answer对我有用!
我尝试使用
msbuild /v:diag
对此进行一些调试,我发现MSBuild正在尝试在可执行文件中嵌入清单,在链接器命令行上使用<somename> .dll.embed.manifest.res,其中这是一个从<somename> .dll.embed.manifest构建的资源文件 . 但清单文件是一个空的Unicode文本文件 . (也就是说,带有Unicode 0xFEFF前缀的双字节文件)因此,根问题似乎与未生成的清单文件有关,或者在使用<somename> .dll.intermediate.manifest时使用它 .
另一种解决方案似乎是关闭Properties,Manifest Tool,Input和Output下的“Embed Manifest”选项 .
总结一下:
如果step1不起作用,请执行Step2
如果step2不起作用,请执行Step3复制文件之一:
C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ bin \ cvtres.exe
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin \ cvtres.exe
C:\ Program Files(x86)\ Microsoft Visual Studio 13.0 \ VC \ bin \ cvtres.exe
然后,替换为C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe和我一起做3步吧
重新安装CMake为我工作 . 新的CMake副本发现它应该使用Visual Studio 11而不是10 .
我使用Windows SDK进行核心Win32编程,并且由于“未知”原因安装了.NET 4.5 . 我已经卸载了,并安装了4.0像以前的答案,是的,它也适用于我 .
我惊讶地发现,我不得不使用无用的.NET框架来使用SDK构建Win32应用程序 .
检查
cvtrs.exe
的版本:错误的版本:
date
:03/18/2010time
:01:16 PMsize
:31,048字节name
:cvtres.exe正确版本:
date
:02/21/2011time
:06:03 PMsize
:31,056字节name
:cvtres.exe如果您的版本错误,您应该从以下位置复制正确的版本:
并在这里替换一个:
即
这是因为.NET Framework 4.5正在取代.NET Framework 4.0 . 我多次卸载Visual Studio 2010而没有运气 . 当我删除.NET Framework 4.5并重新安装Visual Studio 2010时,它很好 .
见Uninstall Visual Studio 11 completely to do a fresh install .
Microsoft Visual Studio 2010 Ultimate 我遇到了同样的问题,它是通过this youtube video中描述的方法解决的
该视频建议将 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
(in my Win7X64 matchine)
中的文件 cvtres.exe 重命名为 cvtres-old.exe我通过以下方式解决了这个问题:
在命令提示符下,键入msconfig并按Enter键 .
单击服务选项卡 .
寻找"Application Experience"并勾选刻度线(即选择此项以启用) .
单击“确定” . 如有必要,重新启动 .
因此问题将永远存在 . 随机构建并调试您的C项目,不受任何干扰 .
对我来说,将'Generate Manifest'设置为'No'可以修复它 . (也用/ INCREMENTAL修复:否)
如果您使用的是x64,here's a resource will help:
发生这种情况是因为Microsoft .NET 4.5与Visual C 10不兼容 . 解决方法是确保运行.NET版本的cvtres.exe而不是Visual C版本 . 我这样做是通过重命名这些文件的Visual C版本并在其位置复制.NET版本 .
根据MSDN论坛中的这个帖子:VS2012 RC installation breaks VS2010 C++ projects,简单地说,从 VS2010 SP1 取
cvtres.exe
或来自 VS2012
并将其复制到 VS2010 RTM 安装中的
cvtres.exe
(一个 without SP1 )这样,您将有效地使用
cvtres.exe
的更正版本,即11.0.51106.1 .在
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe
中对64位版本的工具重复相同的步骤 .此解决方案是安装SP1 for VS2010的替代方案 - 在某些情况下,您根本无法安装SP1(即,如果您需要支持SP1之前的版本) .
This MSDN thread解释了如何修复它 .
总结一下:
编辑(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器 . 你需要安装VS 2010 SP1 compiler pack来取回它们 .
这会影响 Microsoft Windows SDK 7.1 for Windows 7 and .NET 4.0 以及 Visual Studio 2010 .
我没有安装Visual Studio 2012,但我在Visual Studio 2010中仍然遇到此错误 . 我在安装Visual Studio 2010 SP1后解决了这个问题 .
我的问题是我的PC上有两条包含相同库的路径 . 两条路径都添加到 Configuration Properties -> Linker -> General 中的 Additional Library Directories . 删除其中一条路径解决了问题 .
即使安装Service Pack,您也会收到错误,然后尝试删除/重命名C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin文件夹中的cvtres.exe . 这对我有用 .
对于那些使用OpenGL SuperBible第6个源代码示例寻找此问题的解决方案的人来说,解决方案是在Release而不是Debug中构建 . 所有项目都已禁用Release版本中的增量链接选项 .
我在以前使用Visual Studio 2010的计算机上安装Visual Studio 2017和.NET Framework 4.6后出现此问题 .
问题是,在这样的安装之后,来自C:\ Windows \ System32的文件 msvcr100_clr0400.dll 被覆盖了一个非常小的大小~19 Kb的文件,但是前一个大约是800 Kb .
我从另一台构建机器手动恢复文件后,cvtres.exe再次开始正常工作 .
如果禁用增量链接对您不起作用,并且关闭“Embed Manifest”也不起作用,则在路径中搜索CVTRES.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版本的cvtres.exe将不再有效 . 如果这是您路径中的第一个,并且链接器决定它需要将.res文件转换为COFF对象格式,则链接将因LNK1123而失败 .(真的很烦人,错误消息与实际问题无关,但对于Microsoft产品来说这并不罕见 . )
只需删除/重命名旧版本的实用程序,或重新排列PATH变量,以便首先使用的版本 .
请注意,对于x64工具构建,您可能还需要检查
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
哪里有另一个cvtres.exe
.我尝试了几次,最后通过卸载VS2010几次解决了这个问题 . 我想我没有卸载所有文件,这就是为什么它第一次不起作用 .
在VS2012的安装中,据说如果你有VS2010 SP1,你就无法在两个程序中使用同一个项目 . 建议只有一个程序 .
谢谢!
截至2014年1月,由于某些原因我安装了.NET Framework 4.5.1,我不知道是否由于第三方软件安装或自动更新 .
1月29日,我安装了一个组件,我开始接收
信息 . 那时,我通过避免增量链接解决了 .
1月31日,我安装了.NET Framework 4.5.1的另一个组件,增量链接技巧不再起作用了 . 然后我安装了Visual Studio 2010 SP1,但之后问题变成了:
我认为SP1搞砸了我的Visual Studio 2010安装 .
所以我卸载了.NET Framework 4.5.1,安装了.NET Framework 4.0并卸载然后重新安装了Visual Studio 2010.这对我有用 .
如果已安装Visual Studio 2012 RC,则安装.NET 4.5 RC .
卸载.NET 4.5 RC,并安装所需的版本(适用于VS 2010的4.0) . 这应该可以解决您遇到的任何问题 .
这解决了同样的问题 . 无需卸载Visual Studio .
我通过完全卸载VS2012 RC,然后完全卸载VS2010,然后从头开始重新安装VS2010,解决了这个问题 .
这花了很长时间,但我现在能够再次在VS2010中编译C项目 .
通过删除.NET 4.5并将其替换为 .NET 4.0 ,我可以神奇地解决这个问题 . 然后我不得不修复Visual Studio 2010 - 它在某种程度上被破坏了 .
我以前安装过,然后卸载了Visual Studio 2012 - 这可能与问题有关 .
在启用增量链接 - >“否(/ INCREMENTAL:NO)”后它对我不起作用,但在删除rc文件后它对我有效 .