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

标签 c++ visual-studio-2010 mfc

我在 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"/>
  1. 为什么 MSVS 会在 list 文件中写入错误版本的 CRT?
  2. 如何解决问题/使 MSVS 在 list 文件中写入正确版本的 CRT?

我想通了。我有一个对 libcurl.lib 的引用,它引用了在 MSVS 2008 中编译的 openssl 库...在使用正确版本的 openssl 重建 libcurl 后,对 crt 9.0 的引用从 list 文件中消失了。

最佳答案

发生这种情况的原因可能是项目属性中的平台工具集。

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

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

相关文章:

c++ - 通过指针访问非数组 float

c# - 在解决方案之间共享文件, “Add as Link” 无法按预期工作

c# - 对 System.data.entity.design.dll 的引用不起作用

c++ - Win32API : How to determine if EN_CHANGE was because of user action, 不是软件 Action ?

c++ - 使用 MFC 以编程方式创建控件

c++ - mfc++中如何将char*转成char**

c++ - 逐行读取 Unicode 文件 C++

c++ - 如果我不使用 vs110_xp 编译 DLL 会怎样?

C++ 具有多个字符的多个定界符

.net - Microsoft.WebApplication.targets导入在VS 2010 Web应用程序项目中做什么?