2012-07-03 68 views
0

我想通過強制它加載和使用當前目錄中的DLL,而不是Windows目錄,但它不起作用,使其在每個操作系統上工作的程序。我試圖啓用「複製本地」並更改參考路徑,但沒有任何成功,程序試圖從windows目錄加載DLL。 我的問題是:我該如何解決這個問題?強制項目從當前目錄加載DLL

+0

您是指Windows目錄,而不是GAC?即這些非託管DLL? –

+0

我的意思是,如何讓程序在當前目錄下使用DLL引用(debug) –

回答

0

該目錄%windir%\assembly被稱爲GAC。組件不會在那裏複製,但通常使用gacutil /i或安裝程序包進行安裝。

對於許多其他庫和應用程序在未集中協調的構建版本中引用的庫,GAC是合適的文件夾。使用GAC允許您擁有同一個庫的多個版本,所有這些版本都可能間接需要,即使是單個應用程序,也可以並行安裝在系統上。例如,.NET框架本身。

您構建的程序集可能不是那種。基本上是單個應用程序的一部分的應用程序程序集和庫應該永遠不會交給GAC,否則您可能會遇到麻煩。存在各種可能的問題:

  • 一個意外或故意創建具有相同版本號的同一庫的不同(不兼容)構建。
  • GAC中的程序集引用的程序集不在GAC中
  • 一個應用程序將相同程序集安裝到GAC中,但另一個應用程序想要從其本地文件夾(應用程序二進制文件所在的位置)加載它。

加載程序集時,GAC中的代碼獲取首選項。要從GAC中刪除裝配,請使用gacutil /u

1

DLL的搜索順序是documented here on MSDN。它還包括如何修改搜索順序的說明,以便首先搜索本地bin目錄,而不是GAC。