【问题标题】:Exception while trying to load a Berkeley DB DLL尝试加载 Berkeley DB DLL 时出现异常
【发布时间】:2011-06-13 16:28:59
【问题描述】:

我有一个依赖于 C++ DLL (Berkeley DB-libdb_csharp51d.dll) 的 .NET 3.5 应用程序,我可以在我的 Windows 7 机器上毫无问题地运行它,但我尝试了两个其他机器(Windows Server 2008 和 Windows 7)并且应用程序不断收到异常。

例外是:

System.DllNotFoundException:无法加载 DLL“libdb_csharp51d”:应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息。 (HRESULT 例外:0x800736B1)

事件查看器中的消息:

“C:\Path\To\libdb_csharp51d.DLL”的激活上下文生成失败。相关程序集 Microsoft.VC90.DebugCRT,processorArchitecture="amd64",publicKeyToken="AWUe.k,PRvnbjRtZ",type="win32",version="9.0.21022.8" 找不到。详细诊断请使用sxstrace.exe。

(请注意,我已经加密了公钥令牌)

文件夹结构如下:

C:\Path\To\
+ myapplication.exe
+ 一些.DLL
+ libdb_csharp51d.DLL
+ someother.DLL

我在我的机器上运行该应用程序以确保它工作正常,然后我将文件夹原样直接复制到服务器上,因此服务器和我的机器之间的文件夹内容没有区别。我对另一台 Win7 机器也做了同样的事情(所有机器都是 64 位的)。最初我以为安装 Berkeley DB 后问题会得到解决,但即使安装了它,我仍然遇到同样的异常。

有人知道是什么导致了这个问题吗?是否有任何修复/解决方法?

【问题讨论】:

    标签: c# exception dll unmanaged berkeley-db


    【解决方案1】:

    它正在寻找msvcrtd.dll(或带有版本号的)。您应该在开发 PC 上的某个地方拥有它。

    【讨论】:

    • 我安装了 Microsoft Visual Studio C++ Redistributable Package 2008 for x64,文件版本为 9.0.21022.8;此外,文件版本与事件错误消息指示的版本相匹配。仍然得到同样的例外。
    • 我假设需要 DebugCRT,因为 DLL 是为调试模式构建的。如果我使用 DLL 的发布版本,我可以假设它不需要 DebugCRT 吗?
    • @Lirik,您需要使用 DLL 的发行版,可再发行组件仅安装发行版 DLL。您需要做的就是在发布模式下构建 libdb_csharp51d.DLL 并进行部署。 CRT 的调试版本不是可分发的组件 - 根据 Microsoft 的规定,您不得自行分发。他们认为它是 Visual Studio 的一部分,这是获取 Dll 的唯一合法方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多