2011-07-15 46 views
2

我想知道如何加載Appbase和Appdomain外部的程序集。如何在Appbase外部加載程序集(更多信息)

我的問題是我有一個共享目錄上的程序集列表。我的應用程序需要加載這些程序集,它們位於Appbase中指定的路徑之外(可執行文件的路徑)。我不想將它們移到Appbase文件夾中。

有關更多信息,我有一個應用程序在分佈式域中運行以測試程序集的集合。當應用程序啓動時,它會從數組中加載這些程序集。當我在本地桌面上測試此應用程序時,它運行良好(從程序集等加載並進行反射),但是從羣集計算機無法加載這些相同的程序集,並且拋出以下異常:

FileNotFoundException。無法加載文件或程序集或其依賴項之一。該系統找不到指定的文件。

+0

如果你提供了一些關於你爲什麼要加載這些程序集的信息,這可能會有所幫助。它們是否包含插件,還是在編譯時引用? – Justin

+0

有關詳細信息,我有一個在分佈式域中運行的應用程序以及該應用程序的目標:它用於測試程序集測試的集合。當應用程序啓動時,它將從程序集路徑數組中加載程序集應用程序的相同位置,當我在我的本地桌面上測試此應用程序時:它工作正常(從程序集等加載並進行反射),但是從集羣計算機,它無法加載程序集(FileNotFoundException.Could not loaded file或程序集或它的一個依賴項,系統找不到指定的文件)。 –

回答

2

怎麼樣MSDN - Assembly Load File

string filePath = "C:\asmPath"; 
Assembly myAssembly = Assembly.LoadFile(filePath); 

您還可以定義你的app.config探測路徑(我認爲更好的解決方案),並具有加載CLR按需組件。 MSDN Probing Path

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
+1

好的,但這些目錄「bin; bin2 \ subin; bin3」必須在你的例子中的「c:\ asmPath」下。在我的例子中,我的應用程序位於「c:\ application \ application.exe」在「\\ serverNameExample \ assemblies \」中:這就是問題所在。 –

1

有,如果它不能找到一個大會或其引用的一個觸發事件:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 

     } 

它添加你加載程序集之前。在其中放置一個斷點,並在參數中應該有關於你缺少的程序集的一些信息

相關問題