2011-12-30 211 views
1

我最近在C++/CLI中編寫了一個小型本機C++包裝器。它是一個簡單的程序。我能夠正確編譯它並能夠在我的C#項目中添加dll refeernce,而不會出現任何錯誤。我也可以從這個CPP/CLI dll創建對象,並在編譯時訪問這些函數,沒有任何錯誤。爲什麼我的C#程序在運行時找不到在項目中引用的C++/CLI DLL

現在,當我運行該程序時,第一個引用此dll對象的函數調用會引發異常。例外情況如下:

無法加載文件或程序集「ProtobufWrapper,Version = 1.0.4381.26401,Culture = neutral,PublicKeyToken = null」或其某個依賴關係。該系統找不到指定的文件。

我不知道我的情況有什麼問題。

+0

你在GAC上看過它運行的主機嗎? – 2011-12-30 07:01:45

+0

您的C++/CLI項目是否引用任何其他程序集? – 2011-12-30 07:03:00

+0

@ M.Babcock:如果發現DLL但未能加載,我認爲錯誤信息會略有不同。加載失敗的常見原因可能包括缺少依賴關係和錯誤的體系結構(即x64進程中的x86 DLL)。但在這種情況下,它可能不在庫搜索路徑中。 – 2011-12-30 07:09:28

回答

1

DLL文件是否與您開始的.Exe位於同一目錄中?有時該文件不會被複制並找不到。

在DLL引用上單擊屬性並檢查構建操作。將其設置爲複製。

+1

感謝您回覆大家。意識到DLL沒有被複制到主程序的二進制文件夾中。原因在於,我所指的C++/CLI庫中的C#程序只是另一個C#主程序中使用的庫。忘記在主C#程序中添加對我的C++/CLI庫的引用。現在工作很好。 – Alok 2011-12-30 08:24:00

+1

有什麼方法可以明確指定加載DLL的位置?我想避免把它們放在同一個目錄中。我試圖將C#dll的位置添加到PATH,但它沒有幫助。 – 2014-12-03 12:09:59

+2

@Mark:是的,處理AppDomain.AssemblyResolve事件。作爲獎勵,這可以讓您選擇不同的C++/CLI混合模式DLL,具體取決於進程是32位還是64位。 – 2017-03-17 05:55:01

相關問題