3
我在一個涉及SQLITE和.NET的項目中開發了一段時間。 最近,SQLITE發佈了一個新版本。我決定將其安裝到GAC(與我之前的安裝相同)。 現在,我可以在GAC中看到兩個dll。 VS會自動選擇使用最新的?如果在GAC中有多個版本,VS會選擇相同的DLL的哪個版本?
非常感謝提前!
我在一個涉及SQLITE和.NET的項目中開發了一段時間。 最近,SQLITE發佈了一個新版本。我決定將其安裝到GAC(與我之前的安裝相同)。 現在,我可以在GAC中看到兩個dll。 VS會自動選擇使用最新的?如果在GAC中有多個版本,VS會選擇相同的DLL的哪個版本?
非常感謝提前!
如果在應用程序中未使用DLL的完整路徑,則這取決於DLL search order。的默認順序(SafeDllSearchMode
禁用):
- 從其中加載應用程序的目錄。
- 當前目錄。
- 系統目錄。使用
GetSystemDirectory
函數獲取此目錄的路徑。- 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。
- Windows目錄。使用
GetWindowsDirectory
函數獲取此目錄的路徑。- PATH環境變量中列出的目錄。請注意,這不包括 應用程序路徑註冊表項指定的每個應用程序路徑。當計算DLL搜索路徑時,應用程序路徑密鑰未被使用。
感謝您的回答麥克。 我讀了你的鏈接的內容,但是有些東西對我來說還不清楚。 似乎在我的情況下,通過搜索Windows目錄(在我的情況下Windows \ Microsoft.NET \程序集\ GAC_32 \ System.Data.SQLite)找到DLL 但是,那裏有兩個版本。我無法通過閱讀您的鏈接來確定它是使用第一個還是第二個。 或者也許有一些方法可以在運行時找出哪些dll被使用? – d0kt0r1
好吧,我想我找到了一種方法來檢查使用哪個版本。 如果你看VS中的輸出窗口,你會看到所有的DLL加載。在這種情況下加載第一個。 無論如何,再次感謝。 – d0kt0r1
搜索DLL是按名稱執行的。如何在同一個目錄中有兩個版本? –