2

我在 Visual Studio 2005 中构建了一个混合模式 DLL。在依赖项walker 中,我的 DLL 显示了以下 CRT Dlls 的依赖项。请注意,这是在我的 Windows 7 开发机器上。

c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCP80.DLL

"\MSVCR80.DLL

"\MSVCM80.DLL

8.0.50727.4927

在我使用 Visual Studio 2005 的 Windows 7 开发机器上,它编译并运行得很好。问题是它不会在我安装了最新 CRT 的 Windows XP 测试机器上运行。

当我将 DLL 拖到 XP 机器上的 depenency walker 中时,它似乎正在搜索 \System32 中的 DLL...(我去显示完整路径并且没有它们的路径,只有一个黄色感叹号)

问题是WinSxS中这个版本(build 4927)的crt没有安装在XP测试机上。它具有安装了最新 CRT (sp1?) 的 Visual Studio 2005。

8.0.50727.4053是我可以在 MSDN 上找到的最新版本。

我意识到这不是 SO 上发布的最令人兴奋的问题,但是有人知道这个 4927 运行时是怎么回事吗?

* 编辑 *

MT.exe 生成的清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

因此,它针对的是 3 个不同的版本...

4

1 回答 1

1

修订版 4927 是 Windows 7 特定版本,可能由 Microsoft 二进制文件使用。您的构建不应该创建对它的依赖,4053 是 VS2005 的最后一个。顺便说一句,不要使用depends.exe 解决此问题,它不擅长跟踪winsxs 依赖项。

Start troubleshooting this by double-checking what dependency your build generates. First look in vc\include\crtassem.h, the _CRT_ASSEMBLY_VERSION macro generates the manifest entry. Next is to check the manifest that's embedded in your executable. Your project's Release directory contains the .embed.manifest file that was embedded. And File + Open + File on your executable lets you peek at the actual embedded RT_MANIFEST resource.

于 2010-11-16T16:28:16.423 回答