2012-09-13 58 views
3

我有C#,C++ & C++/CLI項目的解決方案。更具體地說:它是C++核心(〜5個非託管dll),C++/CLI核心包裝器和具有項目特定的buisness邏輯的C#程序集。Visual Studio如何加載庫?

前段時間我想出了VS 2008窗體設計器(WinForms)有時無法加載核心封裝程序集。用VS調試器和Procmon花了幾個小時後,我發現VS無法加載程序集,因爲它無法解析包裝程序依賴的非託管庫。 VS在PATH環境變量的每個系統文件夾和文件夾中搜索,但不在包裝程序集所在的文件夾中搜索。另外,我在一個程序集中有兩個表單,一個是從另一個程序集繼承的:VS表單設計器加載父表單很好,並且加載一個繼承的表單失敗。

所以,這是我的問題:有誰知道這種行爲的原因?

P.S.我使用瞭解決方法:將包含項目二進制文件的文件夾添加到PATH變量,但我仍然想知道原因。

回答

0

您是否嘗試將二進制文件放入可執行文件夾?因爲我確信.NET只搜索已知路徑(作爲路徑存儲在%PATH%)和可執行文件的本地文件夾。

我不知道這個的確切原因,但我認爲這是因爲DLL不知道它從何處加載的路徑(託管DLL's do!),只能查看當前目錄和其他已知的路徑。

但也有一種解決方法,您可以創建爲Visual-Studio的啓動可執行文件並執行下列操作之一:

SetDllDirectory會-段:

[DllImport("kernel32.dll", SetLastError = true)] 
public static extern Boolean SetDllDirectory(String pathName); 
相關問題