2016-09-28 68 views
1

我在2010年MSVS MFC项目当我编译它,MSVS生成包含以下行清单文件:为什么MSVS 2010 MFC项目依赖vcredist_x86.exe进行MSVS 2008?

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

其结果是,我得到这取决于两个选择vcredist_x64.exe为MSVS二进制2008和MSVS 2010的vcredist_x86.exe,尽管它实际上只使用vcredist_x86.exe来MSVS 2010!

我试图关闭项目属性中的清单生成。之后,我的应用程序开始只安装MSVS 2010的vcredist_x86.exe。但是一些控件(特别是组合框)破裂并开始显示不正确。我想这是因为窗口没有从以下信息清单更多:

<assemblyIdentity language="*" publicKeyToken="6595b64144ccf1df" 
    processorArchitecture="x86" version="6.0.0.0" 
    name="Microsoft.Windows.Common-Controls" type="win32"/> 
  1. 为什么MSVS清单文件写CRT的版本错误?
  2. 如何解决问题/使MSVS在清单文件中写入正确版本的CRT?

我想通了。我参考了libcurl.lib,它引用了在MSVS 2008中编译的openssl库...在用正确版本的openssl重建libcurl之后,对crt 9.0的引用从清单文件中消失。

+0

我不确定,但我回想起当时的情况。你是否应用了Service Pack 1? – lakeweb

+0

你应该写一个简短的答案并接受它,而不是编辑你的问题的答案。这使得未来的访问者更容易发现问题已经得到解答。 – IInspectable

回答

0

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

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

+0

不,它被设置为v100! –

+0

如果它们包含#pragma指令涉及“manifestdependency”,请检查源代码 – GeorgeT

+0

stdafx.h包含:#pragma comment(linker,“/ manifestdependency:\”type ='win32'name ='Microsoft.Windows.Common-Controls'version ='6.0.0.0'processorArchitecture ='x86'publicKeyToken ='6595b64144ccf1df'language ='*'\“”)没有更多的“manifestdependency”条目。 –