2012-03-22 21 views
3

在Visual Studio 2010中,我已經爲作爲.lib文件提供的外部庫編寫了C++/CLI託管類包裝器,因此可以將其稱爲ExternalLibrary.lib。 .lib作爲項目的依賴項包含在內,編譯時不會發出警告或錯誤。針對.lib編譯的C++/CLI託管DLL無法加載,具有.dll依賴關係。 (VS2010)

當我試圖通過包括它作爲一個C#項目的依賴使用這種包裝項目,我碰到下面的錯誤,當我在調試模式下運行(項目靜靜地失敗,而不調試運行):

FileNotFoundException was unhandled 
Could not load file or assembly 'WrapperProject.dll' or one of its dependencies. 
The specified module could not be found 

我證實WrapperProject.dll位於C#項目的調試文件夾中,因此我決定使用Dependency Walker(http://dependencywalker.com/)檢查其依賴項。列表中的第一個依賴項是「ExternalLibrary.dll」。我認爲這是問題,因爲「ExternalLibrary.dll」從來不存在,只有「ExternalLibrary.lib」。如何讓Visual Studio不要求不存在的DLL,而是將.lib文件合併?

如果我從鏈接器路徑中刪除.lib,它就會引發錯誤,因此它正在查找並找到該文件;我不知道爲什麼最後它會在不存在的.dll上添加依賴關係。

謝謝

回答

5

你不能 - 該DLL將永遠是必需的。 .LIB文件是該DLL的import library

鏈接到.lib文件只是告訴編譯器如何在運行時從相應的.DLL(ExternalLibrary.dll)加載正確的信息。 .DLL仍然是必需的,需要與您的應用程序一起部署。

+0

就是這樣!在一個單獨的目錄中有一個.dll文件,我認爲它已被破壞(試圖用它將鏈接導向損壞的文件警告),但實際上它看起來像我只需要用.lib編譯並將.dll移動到Debug文件夾。 – 2012-03-22 19:17:20

+0

我有同樣的問題,它仍然拋出未找到的異常,即使已經把與DLL有關的DLL與C#應用程序旁邊的C++ \ cli dll放在一起,您是否有任何線索爲什麼仍然會發生? – 2012-09-19 20:52:22