我在 MSVS 2010 中有一个 MFC 项目。当我编译它时,MSVS 生成包含以下行的 list 文件:
<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,尽管它实际上只使用 MSVS 2010 的 vcredist_x86.exe!
我试图关闭项目属性中的 list 生成。之后,我的应用程序开始只使用安装了 MSVS 2010 的 vcredist_x86.exe。但是一些控件(尤其是组合框)损坏并开始显示不正确。我猜这是因为 Windows 不再有 list 中的以下信息:
<assemblyIdentity language="*" publicKeyToken="6595b64144ccf1df"
processorArchitecture="x86" version="6.0.0.0"
name="Microsoft.Windows.Common-Controls" type="win32"/>
- 为什么 MSVS 会在 list 文件中写入错误版本的 CRT?
- 如何解决问题/使 MSVS 在 list 文件中写入正确版本的 CRT?
我想通了。我有一个对 libcurl.lib 的引用,它引用了在 MSVS 2008 中编译的 openssl 库...在使用正确版本的 openssl 重建 libcurl 后,对 crt 9.0 的引用从 list 文件中消失了。
发生这种情况的原因可能是项目属性中的平台工具集。
将其更改为 v100(我想现在它已设置为 v90),重新激活 list 生成和嵌入(Manifest Tool\Input and Output)并重建您的项目。
我是一名优秀的程序员,十分优秀!