2009-06-30 57 views
0

通常,您必須將應用程序使用的所有.dll文件放在與.exe文件相同的位置。我想將這些庫保存在其他專用文件夾中,並只顯示我的應用程序在哪裏尋找它們(通過app.config中的某個路徑或類似的東西)。我該怎麼做呢?如何將.dll文件與使用它們的.exe文件分開?

+0

我很好奇你爲什麼這樣做?如果原因是這樣你可以獨立地更新這些dll,每個應用程序可能是一個wcf web服務可能提供更好的解決方案?老實說呢 – Calanus 2009-06-30 08:53:15

+0

?我被告知;)我們已經失去了使用相同的庫的應用程序,他們想把它們保存在一個地方 – agnieszka 2009-06-30 09:17:02

回答

5

您可以使用app.config中的<probing> element指定在哪裏查找依賴關係。我相信這必須是exe文件所在的目錄,而不是在磁盤上的任意位置。

查看"Locating the assembly through codebases or probing"瞭解更多關於這如何掛在一起的更多信息。

+0

以及我需要在磁盤上的其他地方,而不是應用程序的目錄子目錄 – agnieszka 2009-06-30 09:16:11

+0

在這種情況下,我認爲你的選擇1)GAC; 2)Assembly.LoadFrom(即手動執行); 3)調查codeBase元素,但我不確定這會覆蓋你的情況。 – 2009-06-30 09:21:35

+1

是否與鏈接的目錄一起工作,即創建一個實際上是實際目錄的鏈接(軟或硬)的子目錄。這當然很不好意思:-) – 2009-07-01 09:56:46

2

也考慮GAC - 其目的是爲了保持組件;)

1

其實有一些其他的方式,西裝我的需求最好。使用反射(assebly.loadfrom)是不愉快的,需要我的代碼進行很多更改。但是,您可以向appDomain.AssemblyResolve事件添加處理程序,並在找不到要求的程序集的位置時顯示它。

static void Main() 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

     static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      return Assembly.LoadFrom("C:\\TestAssembly.dll"); 
     } 
0

我建議您使用GAC或分發所有依賴的DLL與EXE。否則,您可能會冒險得到模糊的版本控制錯誤或突然停止工作的應用程序。

另外,不要忘記,如果您的共享代碼在網絡共享上,您可能需要修改每臺計算機的安全設置。

Regards

相關問題