2011-06-13 62 views
1

我有一个.NET 3.5应用程序,它具有对C++ DLL(Berkeley DB-libdb_csharp51d.dll)的依赖关系,我可以在没有问题,但我尝试了两台其他机器(Windows Server 2008和Windows 7),并且该应用程序一直在收到异常。尝试加载Berkeley DB DLL时出现异常

唯一的例外是:

System.DllNotFoundException:无法加载DLL“libdb_csharp51d”:应用程序未能启动,因为它并排端配置不正确。请参阅应用程序事件日志或使用命令行sxstrace.exe工具获取更多详细信息。 (从HRESULT异常:0x800736B1)

在事件查看器的消息:

激活上下文生成失败为 “C:\路径\至\ libdb_csharp51d.DLL”。未找到依赖程序集Microsoft.VC90.DebugCRT,processorArchitecture =“amd64”,publicKeyToken =“AWUe.k,PRvnbjRtZ”,type =“win32”,version =“9.0.21022.8”。请使用sxstrace.exe进行详细诊断。

(请注意,我加密的公钥标记)

的文件夹结构是这样:

C:\路径\为\
+ myapplication.exe
+一些.DLL
+ libdb_csharp51d.DLL
+ someother.DLL

我跑我的机器,使苏上的应用它工作正常,然后我直接将文件夹复制到服务器上,以便服务器和我的机器之间的文件夹内容没有区别。我也和其他Win7机器一样(所有的机器都是64位)。起初,我认为一旦安装了Berkeley DB就可以解决问题,但即使安装了Berkeley DB,我仍然会遇到同样的异常。

有没有人知道可能会导致这个问题?是否有任何修复/解决方法?

回答

2

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

+0

我安装了Microsoft Visual Studio C++ Redistributable Package 2008 for x64,其版本号为9.0.21022.8;此外,文件版本与事件错误消息指示的版本相匹配。仍然得到相同的例外寿。 – Kiril 2011-06-14 19:18:18

+0

我认为DebugCRT是需要的,因为DLL是为调试模式而构建的。如果我使用DLL的发布版本,我可以假设它不需要DebugCRT? – Kiril 2011-06-14 19:44:07

+1

@Lirik,你需要使用DLL的发布版本,可再发行组件只安装发行DLL。所有你需要做的就是以发布模式构建libdb_csharp51d.DLL并部署它。 CRT的调试版本不是可分发的组件 - 根据Microsoft的规定,您不得自行发布该组件。他们认为它是Visual Studio的一部分,这是获得Dll的唯一合法途径。 – shf301 2011-06-14 19:50:57

相关问题