2011-08-12 147 views
2

我建立在C#的應用程序具有該結構:組組件參考路徑

Systempath下
- MainApplication.EXE
- API.dll
- 模塊
------- Module1.dll
------- Module2.dll

MainApplication.exe對程序集API.dll有參考意義。它通過「Assembly.Load(dllFile)」使用程序集Module1和Module2。 文件Module1.dll和Module2.dll也需要文件API.dll。

所以,他們需要API.dll在相同的路徑,他們是我需要把文件API.dll在這兩個目錄(系統路徑和模塊)。

我想要的是一種告訴模塊文件API.dll在該文件夾中的方式,當我用Assembly.Load加載它時。

我無法使用全局程序集緩存並且無法更改此結構。

我能做些什麼來解決這個問題?

+0

我建議你在Stack Overflow上搜索'AppDomain.CurrentDomain.AssemblyResolve'。你一定會發現一個現存的問題來回答你的問題。 – stakx

回答

4

在您的MainApplication.exe.config文件中,您可以添加<probing> element,該文件指定裝入程序集時將搜索的子目錄的以分號分隔的列表。例如:

<?xml version="1.0"?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <probing privatePath="Modules" /> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

在您的配置中使用此功能,您將能夠在Module1上執行Assembly.Load或引用;並且由於您的應用程序根目前仍處於頂層,如果Module1執行了Assembly.Load或對API.dll的引用,它將自動從頂層目錄中獲取它。

0

您確定API.dll需要位於Module1/2.dll所在的文件夾中嗎?當您以編程方式加載模塊時,主應用程序中的API.dll已經加載。只要確保它們是用相同版本的API編譯的。