2012-01-29 193 views
2

我試圖通過將某些DLL加載到ReflectionOnly上下文來加速我的應用程序。ReflectionOnly加載上下文的問題

此加載發生在輔助AppDomain上,該輔助AppDomain註冊了AssemblyResolve和AssemblyReflectionOnlyResolve事件處理程序。

Type[] tps = dll.GetTypes(); 

這將引發異常說:

出於某種原因,加載這些組件時,代碼這種方法失敗

無法解析依賴於組裝「系統,版本= 2.0 .0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089',因爲它尚未預加載 。使用ReflectionOnly API時,依賴於 的程序集必須通過ReflectionOnlyAssemblyResolve事件預加載或按需加載。

將程序集加載到「僅反射」上下文中時,其工作方式與假定的相同。

是否有使用僅反射上下文的任何陷阱/警告?爲什麼運行時不能在GAC中找到該程序集並像往常一樣加載它?我錯過了什麼?

回答

6

從MSDN:「依賴項不會自動加載到僅反射的上下文中」。因此,在您的AppDomain.ReflectionOnlyResolve事件處理程序中,您必須通過Assembly.ReflectionOnlyLoad()加載'System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。你應該從ResolveEventArgs的名稱屬性的依賴集名稱爲

public static Assembly My_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
     string missedAssemblyFullName = args.Name; 
     Assembly assembly = Assembly.ReflectionOnlyLoad(missedAssemblyFullName); 
     return assembly 
} 

注:ReflectionOnlyLoad()只加載在GAC大會。您可以使用ReflectionOnlyLoadFrom直接加載dll。

+0

我也設置了這個事件處理程序,就像我原來的問題所寫的一樣。 – 2012-01-29 21:14:38