我在MSVS 2010中有一个MFC项目。进行编译时,MSVS会生成包含以下行的清单文件:

<assemblyIdentity publicKeyToken="1fc8b3b9a1e18e3b"
    processorArchitecture="x86" version="9.0.21022.8"
    name="Microsoft.VC90.CRT" type="win32"/>


结果,我得到一个依赖于MSVS 2008的vcredist_x86.exe和依赖于MSVS 2010的vcredist_x86.exe的二进制文件,尽管它实际上仅将vcredist_x86.exe用于MSVS 2010!

我试图关闭项目属性中的清单生成。之后,我的应用程序开始仅使用vcredist_x86.exe来安装MSVS 2010。但是某些控件(尤其是组合框)损坏并开始显示不正确。我猜发生这种情况是因为Windows不再从清单中获取以下信息:

<assemblyIdentity language="*" publicKeyToken="6595b64144ccf1df"
    processorArchitecture="x86" version="6.0.0.0"
    name="Microsoft.Windows.Common-Controls" type="win32"/>



MSVS为什么在清单文件中写入错误版本的CRT?
如何解决问题/使MSVS在清单文件中写入正确版本的CRT?




我想到了。我引用了libcurl.lib,其中引用了在MSVS 2008中编译的openssl libs ...使用正确版本的openssl重建libcurl之后,对清单9.0的引用从清单文件中消失了。

最佳答案

这可能是由于项目属性中的平台工具集导致的。

将其更改为v100(我想现在将其设置为v90),重新激活清单生成和嵌入(清单工具\输入和输出),然后重建您的项目。

关于c++ - 为什么MSVS 2010 MFC项目依赖于MSVS 2008的vcredist_x86.exe?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39751116/

10-09 00:24