【发布时间】:2011-03-24 09:59:34
【问题描述】:
我有一台新安装的开发机器,装有 Windows 7 和 Visual Studio 2010 Service Pack 1。
在我们的解决方案中,我们有一个供多个应用程序使用的 C++ DLL。
在 Release 配置中一切正常,但在 Debug 配置中,当我尝试运行其中一个应用程序时,我收到了应用程序无法正确启动的错误对话框。
我发现这是我们 C++ DLL 中 SxS 配置的问题。由于某种原因,DLL 的清单包含以下参考:
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
而且我的机器上没有安装 VC90 运行时库的 Debug 版本。
由于我们之前遇到过一些类似的问题,所以我们总是确保我们使用的外部库是用我们用于开发的相同 VS 版本编译的。
但看起来某处有对 VC90 DebugCRT 的引用。我试图在我们的外部库上使用 Dependency Walker 和 PeStudio 来解决这个问题,但我在任何地方都找不到对 VC90 DebugCRT Dll 的任何引用。
我实际上是通过在我们的 Dll 的链接器设置中禁用清单文件的生成来解决这些问题的。因此,VC90 DebugCRT 实际上并不是应用程序运行所必需的,但无论如何都会被拉进来。
我现在只是想知道 VS 在构建过程中如何确定要包含在清单文件中的引用以及如何诊断该引用来自何处?
【问题讨论】:
标签: visual-studio-2010 visual-c++ dll manifest winsxs