1

我有一台新安装的开发机器,装有 Windows 7 和 Visual Studio 2010,Service Pack 1。

在我们的解决方案中,我们有一个由多个应用程序使用的 C++ DLL。

在发布配置中,一切正常,但在调试配置中,当我尝试运行其中一个应用程序时,我收到应用程序无法正确启动的错误对话框。

我发现这是我们 C++ DLL 中 SxS 配置的问题。由于某种原因,DLL 的清单包含以下参考:

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

而且我的机器上没有安装 VC90 运行时库的调试版本。

由于我们之前遇到过一些类似的问题,因此我们始终确保我们使用的外部库是使用我们用于开发的相同 VS 版本编译的。

但看起来某处有对 VC90 DebugCRT 的引用。我试图在我们的外部库上使用 Dependency Walker 和 PeStudio 来解决这个问题,但我在任何地方都找不到对 VC90 DebugCRT Dll 的任何引用。

实际上,我通过在我们的 Dll 的链接器设置中禁用清单文件的生成来解决这些问题。因此,VC90 DebugCRT 实际上并不是应用程序运行所必需的,但无论如何都会以某种方式拉入。

我现在只是想知道 VS 在构建过程中如何确定要包含在清单文件中的引用以及如何诊断该引用的来源?

4

1 回答 1

0

首先检查典型问题,例如“Properties/C++/Code Generation/Runtime lib”以及“_DEBUG”未定义,适用于您所依赖的应用程序和库。如果没有找到它,打开详细链接“链接器/常规/显示进度”,看看它是否告诉你它在调试 crt 中寻找什么。

于 2011-03-24T10:03:51.900 回答