2012-02-20 24 views
0

如果我通過以下引用在C#中的外部非託管的DLL:在C#中放置外部DLL的位置?

[DLLImport("MyDLL.dll", ... 

應該在哪裏,當我想從我的IDE中運行代碼的DLL放在哪裏?它應該在bin\Debug文件夾中嗎?

回答

1

你正在使用哪種編譯配置?

如果你想運行從Visual Studio調試應用程序/運行它會在你的項目文件夾

如果你想通過雙擊運行,它應該是你的exe這是

附近斌\調試

斌\發佈

文件夾。

+0

實際上,在工作目錄之前搜索可執行文件所在的目錄,而在安全配置中,從不搜索工作目錄。 http://msdn.microsoft.com/en-us/library/7d83bc18.aspx – 2012-02-20 06:16:43

+0

如果你嘗試這個,你會看到它的工作 – accfews 2012-02-20 06:38:04

+0

但第二個位置,與.exe的,也是可行的,這是一個更好的選擇因爲Windows首先在那裏。 – 2012-02-20 14:16:55

0

是的,除了由編譯器生成的.exe文件(如你所說,它最終在bin\Debug\)應該是完美的。

1

任何位置可由LoadLibrary函數定位。有關更多信息,請參見Dynamic-Link Library Search Order

如果SafeDllSearchMode啓用,搜索順序如下:

  • 從其中加載應用程序的目錄。
  • 系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。
  • 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。
  • Windows目錄。使用GetWindowsDirectory函數獲取此目錄的路徑。
  • 當前目錄。
  • 環境變量PATH中列出的目錄。請注意,這不包括App Paths註冊表項指定的每個應用程序路徑。計算DLL搜索路徑時不使用App Paths鍵。

bin\Debug滿足第一點,假設你永遠只能運行在其Debug配置的應用程序。

+0

我會強調第一個選項實際上是_best_之一。出於安全原因,以及出於部署和維護的原因(至少只要本地DLL也是你自己的,並且沒有單獨的安裝程序)。如果你需要運行「釋放」配置,你也可以把它放在bin \ Release中。 – 2012-02-20 06:20:38