Visual studio Can';由于Visual C运行时DLL的依赖关系问题,无法加载DLL

Visual studio Can';由于Visual C运行时DLL的依赖关系问题,无法加载DLL,visual-studio,dll,Visual Studio,Dll,我正在尝试加载第三方DLL,但在尝试加载时出错。在Dependency Walker中打开它表明DLL仅依赖于kernel32.DLL和msvcr90.DLL。但是,打开此DLL时,我在Dependency Walker中遇到以下错误:error[我正在加载的DLL的完整路径]的并排配置信息包含错误。由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题(14001)。 系统上唯一存在的msvcr90.dll副本是我复制到包含第三方dll的目录中的副本。我在另一台机器上遇到

我正在尝试加载第三方DLL,但在尝试加载时出错。在Dependency Walker中打开它表明DLL仅依赖于kernel32.DLL和msvcr90.DLL。但是,打开此DLL时,我在Dependency Walker中遇到以下错误:
error[我正在加载的DLL的完整路径]的并排配置信息包含错误。由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题(14001)。

系统上唯一存在的msvcr90.dll副本是我复制到包含第三方dll的目录中的副本。我在另一台机器上遇到了一个非常相似的问题,并安装了Visual C++ 2008可重新分配的包,微软从中修复了它。然而,我真的需要弄清楚这一点,因为我不能在所有需要运行该软件的机器上安装可再发行软件包

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

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


但是,将DLL的确切版本复制到有问题的机器上仍然无法解决问题。有什么用?

好的,我想出来了。我必须包含一份Microsoft.VC90.CRT.manifest文件的副本。通常,您可以从[Visual Studio 9.0安装目录]\VC\redist\x86\Microsoft.VC90.CRT目录获取此信息。然而,我安装了VisualStudio的SP1,其中这些文件的版本略有不同。我最终从MS的可再发行包中提取了相应的文件。显然,如果我有另一个依赖于不同版本的msvcr90.DLL的第三方DLL,我将遇到麻烦。我想这就是为什么微软从一开始就创造了并行的东西

简言之(对于未来任何潜在的谷歌用户),您有两个选择:

  • 安装Visual C++ 2008 可再发行软件包(仅限谷歌) 这个术语,你会发现)
  • 或者手动复制必要的DLL 到您的应用程序目录 包括.manifest文件

如果为应用程序创建安装程序,则(取决于您使用的安装程序创建工具),这将自动拉入相应的DLL或使用正确的合并模块。这通常比手动复制DLL容易出错,这可能与windows SxS(并行)安装冲突。另一种选择是静态链接到运行时,尽管这可能并不总是可行的。谢谢,这实际上可能比我的答案更正确。我将研究在安装系统中打包合并模块所涉及的内容。到目前为止,该软件是xcopy可部署的,在某些配置中表现不错。