2009-11-24 83 views
1

我想加载第三方DLL,但试图加载时出现错误。在Dependency Walker中打开它表明该DLL只依赖于kernel32.dll和msvcr90.dll。但是,在打开此DLL时,在Dependency Walker中出现以下错误:Error The Side-by-Side configuration information for [full path to the dll that I am loading] contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).由于Visual C运行时DLL的依赖性问题,无法加载DLL

系统上存在的msvcr90.dll的唯一副本是我复制到包含第三方DLL的目录中的一个副本。我在另一台机器上遇到了一个非常类似的问题,并且从Microsoft安装Visual C++ 2008 Redistributable软件包解决了这个问题。然而,我真的需要深入到底,因为我无法在需要运行的所有机器上安装可再发行组件包。

我也尝试在Visual Studio中打开第三方DLL并检查其清单。在这里面我可以看到,它明确地依赖于Visual C运行时库的版本SP0:

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

然而,复制该DLL的机器的问题的确切版本仍然没有解决它。是什么赋予了?

回答

2

好吧,我想通了。我必须包含一个Microsoft.VC90.CRT.manifest文件的副本。通常情况下,您可以从[Visual Studio 9.0安装目录] \ VC \ redist \ x86 \ Microsoft.VC90.CRT目录中获取。但是,我安装了SP1的Visual Studio,它们的版本稍有不同。我最终从MS的可再发行组件包中提取适当的文件。很明显,如果我有另一个第三方DLL依赖于不同版本的msvcr90.dll,我会遇到麻烦。我想这就是为什么微软首先创建了并排的东西。

在短(在未来任何可能的Google),你有两个选择:

  • 安装Visual C++ 2008 再发行组件包(只是谷歌 这个词,你会发现它)
  • 或手动复制所需的DLL 到包括.manifest的文件
+0

您的应用程序目录 如果您的应用程序创建一个安装程序,然后(取决于我你使用的nstaller创建工具),它应该自动引入合适的dll或使用正确的合并模块。这通常比手动复制dll更容易出错,这可能与Windows SxS(并行)安装冲突。 另一种替代方法是静态链接运行时,尽管这可能并不总是实用。 – 2009-11-24 22:41:03

+0

谢谢,这实际上可能是比我更正确的答案。我将研究与我的安装系统一起打包合并模块的过程。到目前为止,该软件已被xcopy部署,这在一些配置中很不错。 – Jason 2009-11-25 20:45:20