为什么MSVS 2010 MFC项目依赖于MSVS 2008的vcredist_x86.exe



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

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

结果,我得到一个二进制文件,依赖于vcredist_x86.exe的MSVS 2008和vcredist_x86.exe的MSVS 2010,虽然它实际上只使用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"/>
  1. 为什么MSVS在manifest文件中写了错误的CRT版本?
  2. 如何解决问题/使MSVS在清单文件中写入正确版本的CRT ?

我明白了。我有一个libcurl的引用。它引用了在msvs2008中编译的openssl库…在使用合适的openssl版本重新构建libcurl后,对crt 9.0的引用从manifest文件中消失了。

这可能是因为项目属性中的平台工具集。

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

最新更新