问题描述:电脑上本来的开发环境是VS2010,在学习某一程序时需要跟高版本的VS,于是安装了VS2013,这是问题来了,原版在VS2010下开发的程序在进行编译时出现这样的问题:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏。
随之而来的解决方法有三种:
方法一) :将VS环境下当前选中,依次选择:项目->项目属性->配置属性->连接器->清单文件->生成清单“是”改为“否”。
方法二) 将VS环境下当前选中,依次选择:项目->项目属性->配置属性->清单工具->输入与输出->嵌入清单“是”改为“否”。若还不能解决问题进入第三种方法;
方法三) 查看计算机是否为64bit操作系统,如果是,继续如下操作:
查找是否有两个cvtres.exe。
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cvtres.exe(这个路径为最高VS版本的路径)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右键属性—详细信息,查看两者版本号,删除/重命名较旧的版本。这是治本的办法,删除旧版本的cvtres.exe后,就不需要每次都设置VS配置了。
解决了上述问题又有了新的问题,VS编译程序时生成的清单到底是什么,有什么作用?
关于清单的相关概念在MSDN上有详细描述,链接如下:
http://msdn.microsoft.com/zh-cn/library/ms235542(v=vs.120).aspx
其实清单是VS 2005及VS以后版本在生成可执行文件时使用了一种技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。而连接器LINK是通过调用cvtres.exe完成文件向coff格式的转换的,所以出现这种错误的原因就是cvtres.exe出现了问题,使用最新的cvtres.exe替换老的文件即可。替换之前记得备份一下,如果不对,可以替换回来。
完毕,对VS还是很陌生,以后要多了解才行,不然出了问题后一头雾水,就是找到解决方案也是知其然不知其所以然,引以为戒。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2010anzhuangwenti/2020/0724/2582.html