【问题标题】:Can't load DLL due to dependency issue with Visual C Runtime DLL由于 Visual C 运行时 DLL 的依赖性问题,无法加载 DLL
【发布时间】:2009-11-24 19:44:53
【问题描述】:

我正在尝试加载第 3 方 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).

系统上唯一存在的 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 复制到有问题的机器上仍然不能解决问题。什么给了?

【问题讨论】:

    标签: visual-studio dll


    【解决方案1】:

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

    简而言之(对于未来的任何潜在 Google 员工),您有两种选择:

    • 安装 Visual C++ 2008 可再发行包(只是谷歌 这个词,你会找到的)
    • 或手动复制必要的 DLL 到您的应用程序目录 包括 .manifest 文件

    【讨论】:

    • 如果您为您的应用程序创建安装程序,那么(取决于您使用的安装程序创建工具)这应该会自动拉入适当的 dll 或使用正确的合并模块。这通常比手动复制 dll 更不容易出错——这可能与 Windows SxS(并排)安装发生冲突。另一种选择是静态链接到运行时,尽管这可能并不总是可行的。
    • 谢谢,这实际上可能比我的答案更正确。我将研究在我的安装系统中打包合并模块所涉及的内容。到目前为止,该软件一直是 xcopy 可部署的,这在某些配置中很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-10-17
    • 1970-01-01
    • 2021-08-05
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多