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

时间:2016-09-28 14:58:16

标签: c++ visual-studio-2010 mfc

我在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"/>
  1. 为什么MSVS在清单文件中写错了CRT版本?
  2. 如何解决问题/让MSVS在清单文件中写入正确版本的CRT?
  3. 我明白了。我有一个libcurl.lib的引用,它引用了在MSVS 2008中编译的openssl库...在使用正确版本的openssl重建libcurl之后,对清单文件的引用消失了。

1 个答案:

答案 0 :(得分:0)

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

将其更改为v100(我想现在设置为v90),重新激活清单生成和嵌入(Manifest Tool \ Input and Output)并重建项目。