2011-06-13 107 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

相關問題