如果我通過以下引用在C#中的外部非託管的DLL:在C#中放置外部DLL的位置?
[DLLImport("MyDLL.dll", ...
應該在哪裏,當我想從我的IDE中運行代碼的DLL放在哪裏?它應該在bin\Debug
文件夾中嗎?
如果我通過以下引用在C#中的外部非託管的DLL:在C#中放置外部DLL的位置?
[DLLImport("MyDLL.dll", ...
應該在哪裏,當我想從我的IDE中運行代碼的DLL放在哪裏?它應該在bin\Debug
文件夾中嗎?
你正在使用哪種編譯配置?
如果你想運行從Visual Studio調試應用程序/運行它會在你的項目文件夾
如果你想通過雙擊運行,它應該是你的exe這是
附近斌\調試
或
斌\發佈
文件夾。
是的,除了由編譯器生成的.exe
文件(如你所說,它最終在bin\Debug\
)應該是完美的。
任何位置可由LoadLibrary
函數定位。有關更多信息,請參見Dynamic-Link Library Search Order:
如果
SafeDllSearchMode
啓用,搜索順序如下:
- 從其中加載應用程序的目錄。
- 系統目錄。使用
GetSystemDirectory
函數獲取此目錄的路徑。- 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。
- Windows目錄。使用
GetWindowsDirectory
函數獲取此目錄的路徑。- 當前目錄。
- 環境變量
PATH
中列出的目錄。請注意,這不包括App Paths註冊表項指定的每個應用程序路徑。計算DLL搜索路徑時不使用App Paths鍵。
bin\Debug
滿足第一點,假設你永遠只能運行在其Debug
配置的應用程序。
我會強調第一個選項實際上是_best_之一。出於安全原因,以及出於部署和維護的原因(至少只要本地DLL也是你自己的,並且沒有單獨的安裝程序)。如果你需要運行「釋放」配置,你也可以把它放在bin \ Release中。 – 2012-02-20 06:20:38
實際上,在工作目錄之前搜索可執行文件所在的目錄,而在安全配置中,從不搜索工作目錄。 http://msdn.microsoft.com/en-us/library/7d83bc18.aspx – 2012-02-20 06:16:43
如果你嘗試這個,你會看到它的工作 – accfews 2012-02-20 06:38:04
但第二個位置,與.exe的,也是可行的,這是一個更好的選擇因爲Windows首先在那裏。 – 2012-02-20 14:16:55