新手提问:VS2010调试时总是提示找不到可执行文件,求解答。。

新手提问:VS2010调试时总是提示找不到可执行文件,求解答。。,第1张

关于VS调试时出现的找不到可执行文件问题的可能的解决办法

VS在生成可执行文件时运用了一种新的技术,该技术生成的可执行文件会随同生成一个清单文件(manifest file)(.manifest后缀文件)(其实质上是XML文档,你能够用文本编辑器翻开看看),并在链接完成后将该清单文件嵌入到exe文件中(默许状况下)。而在FAT32文件系统中,在处置清单文件阶段,当增量链接时不能完成清单文件的更新(默许状况下),于是形成清单文件嵌入失败,从而使该exe文件运转时没有相应的清单文件而运转失败并提示如上错误。

处理计划很多,罗列如下:

1. 由于这是在链接动态运转库呈现的问题,所以你能够选择代码生成的衔接方式为/MTd而非/MDd,不用这些DLL文件从而防止问题的呈现。该办法有一个很显然的缺陷:适用范围有限,不引荐该办法。

2. 既然跟FAT32系统有关,那么本人们能够选择在NTFS文件系统中开发从而防止该问题,此办法同上,也是采用的逃避问题的方式,不倡导。

3. 该办法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规”中的“运用FAT32处理方法”选择“是”(默许为“否”),重重生成项目即可处理问题。该办法是独一真正针对问题所在而提出的处理办法,使清单工具能够正确更新。(此办法是官方处理办法,也比拟便当,引荐)

4. 既然问题是在更新嵌入的清单文件时发作的,由于FAT32的缘由而未能更新嵌入的清单文件,于是本人们有如下两种处理办法:

(1)不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此办法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默许的依据时戳而决议能否更新清单文件。

(2)不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默许状况下,其文件名为exe文件的全名加上“.manifest”),防止了嵌入清单文件可能失败的问题。在程序运转时,会用到该清单文件。显然,这种方式使可执行程序产生了更多的外部依赖,不引荐。

另外,还有一个不能称为办法的土方法C拦畚Build前手动删除*.ilk文件(增量链接文件)(当然能够在项目属性中写入删除命令,使其自动执行),不引荐该土方法。

最后,总结一下:

1. 此问题只在特定条件下才会呈现:在FAT32文件系统中编译、默许设置(增量形式、不启用FAT32处理计划、嵌入清单文件)、非第一次生成可执行文件文件(即在增量衔接、更新清单文件时)。

2. 处理计划1和4.1便当适用,引荐运用。

VS在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest

file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认

情况下)。而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该

exe文件运行时没有相应的清单文件而运行失败并提示如上错误。

解决方案很多,列举如下:

1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd而非/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,不推荐该方法。

2. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不提倡。

3.

该方法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规”中的“使用FAT32解决办法”选择“是”(默认为“否”),重新生成项目即可解

决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。(此方法是官方解决方法,也比较方便,推荐)

4. 既然问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:

(1)不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。

(2)不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默

认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方

式使可执行程序产生了更多的外部依赖,不推荐。

另外,还有一个不能称为方法的土办法:每次Build前手动删除*.ilk文件(增量链接文件)(当然可以在项目属性中写入删除命令,使其自动执行),不推荐该土办法。

最后,总结一下:

1. 此问题只在特定条件下才会出现:在FAT32文件系统中编译、默认设置(增量模式、不启用FAT32解决方案、嵌入清单文件)、非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。

2. 解决方案1和4.1方便实用,推荐使用。

2个解决办法:

(1)项目——>属性——>连接器——>清单文件 中生成清单 “是” 修改为 “否” 该方法一般都可以解决问题,但是每次创建项目都要设置一次。

(2)查找是否有两个cvtres.exe 删除较旧版本。 第一个是在你 VS2010安装目录下 如(C:\Program Files\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe)

第二个是C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe 通过右键查看属性,查看文件版本号,删除较旧版本即可。 该方法可以彻底解决这个问题,之后创建项目不需要再次修改清单文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11858210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存