Visual studio 2010 错误';链接:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏';安装Visual Studio 2012版本预览后

Visual studio 2010 错误';链接:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏';安装Visual Studio 2012版本预览后,visual-studio-2010,visual-studio,visual-studio-2012,Visual Studio 2010,Visual Studio,Visual Studio 2012,我安装了VisualStudio 2012发布预览,它看起来很好,但是现在当我尝试使用VisualStudio 2010编译C++项目时,我得到以下错误信息: 链接:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏 我不是100%肯定这一点,但它似乎与包含.rc(资源)文件的项目有关 我尝试过通过添加/删除程序和重新启动来修复VisualStudio2010,但没有效果 < >我也会得到同样的错误,如果我使用VisualStudio 2012 RC编译C++项目,当设置为使用Vis

我安装了VisualStudio 2012发布预览,它看起来很好,但是现在当我尝试使用VisualStudio 2010编译C++项目时,我得到以下错误信息:

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

我不是100%肯定这一点,但它似乎与包含
.rc
(资源)文件的项目有关

我尝试过通过添加/删除程序和重新启动来修复VisualStudio2010,但没有效果

< >我也会得到同样的错误,如果我使用VisualStudio 2012 RC编译C++项目,当设置为使用VisualStudio 2010工具集时。升级到VisualStudio2011工具集解决了这个问题(但我当然不想对生产代码这样做)


更新:我已卸载Visual Studio 2012并重新启动,但问题仍然存在!救命啊

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

它已经花了很长时间,但是我现在又能在VS2010中编译C++项目了。

解释如何修复它。 总结如下:

  • 通过转到,禁用增量链接

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • 或者安装VS2010 SP1

编辑(@CraigRinger):请注意,安装VS 2010 SP1将删除64位编译器。您需要安装以将其取回


这会影响Microsoft Windows SDK 7.1 for Windows 7和.NET 4.0以及Visual Studio 2010。我尝试了几次,最后通过多次卸载VS2010解决了这个问题。我想我没有卸载所有的文件,这就是为什么它第一次不起作用

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

谢谢

这是因为Framework4.5正在取代.NETFramework4.0。 我卸载了VisualStudio2010好几次,但都没有成功。当我删除.NETFramework4.5并重新安装VisualStudio2010时,一切正常


请参阅。

如果您已安装Visual Studio 2012 RC,则它已安装.NET 4.5 RC

卸载.NET 4.5 RC,并安装所需的版本(VS 2010为4.0)。这应该可以解决您遇到的任何问题


这解决了同样的问题。无需卸载Visual Studio。

对于我来说,将“生成清单”设置为“否”可以修复此问题。(也修复了/INCREMENTAL:NO)

+1对用户的缩写,因为它对我有用

我试图用
msbuild/v:diag
对此进行一些调试,我发现它正在尝试在可执行文件中嵌入清单,链接器命令行上有.dll.embed.manifest.res,其中是从.dll.embed.manifest生成的资源文件。但是清单文件是一个空的Unicode文本文件。(即,具有Unicode 0xFEFF前缀的两字节文件)

因此,根本问题似乎与未生成清单文件有关,或者与应使用.dll.intermediate.manifest时使用该清单文件有关


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

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

接下来我改变了:

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

它对我有效:)

通过删除4.5并用.NET4.0替换它,我神奇地解决了这个问题。然后,我不得不修复VisualStudio2010——它在某种程度上被破坏了


我以前安装过Visual Studio 2012,然后又取消安装,这可能与此问题有关。

我没有安装Visual Studio 2012,但在Visual Studio 2010中仍然出现此错误。我在安装Visual Studio 2010 SP1后解决了这个问题。

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

通过使用/VERBOSE链接器选项进行调试,我发现链接器在尝试调用cvtres时正在写入错误消息,但失败了

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

(错误消息与实际问题无关,这确实令人恼火,但这对于Microsoft产品来说并不罕见。)

只需删除/重命名较旧版本的实用程序,或重新排列PATH变量,以便首先使用有效的版本


请注意,对于x64工具构建,您可能还必须根据MSDN论坛中的以下线程检查
C:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
,其中存在另一个
cvtres.exe
,只需从VS2010 SP1获取
cvtres.exe即可

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.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安装中的
cvtres.exe
(不带SP1的

这样,您将有效地使用正确版本的
cvtres.exe
,即11.0.51106.1

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

此解决方案是安装的替代方案
dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
copy "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 
Error   6   error LNK1104: cannot open file 'msvcrtd.lib'. 
1. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
2. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe

1. C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
2. C:\windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe
Step1

Project Properties 
   -> Configuration Properties 
       -> Linker (General) 
          -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
Project Properties 
   -> Configuration Properties 
       -> Manifest Tool (Input and Output) 
          -> Enable Incremental Linking -> "No"