ReflectionOnly加载上下文的问题

lys*_*cid 2 .net c# reflection

我试图通过将某些DLL加载到ReflectionOnly上下文来加速我的应用程序.

此加载发生在辅助AppDomain上,该辅助AppDomain注册AssemblyResolve和AssemblyReflectionOnlyResolve事件处理程序.

出于某种原因,在加载这些程序集时,代码在此方法上失败:

Type[] tps = dll.GetTypes();
Run Code Online (Sandbox Code Playgroud)

这引发了一个异常说:

无法解析对程序集'System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的依赖性,因为它尚未预加载.使用ReflectionOnly API时,必须通过ReflectionOnlyAssemblyResolve事件按需预加载或加载相关的程序集.

将程序集加载到Reflection Only上下文时,这可以按照假设进行操作.

使用Reflection Only上下文是否存在任何问题/警告?为什么运行时不能在GAC中找到此程序集并像往常一样加载它?我错过了什么吗?

hsh*_*hen 7

来自MSDN:"依赖关系不会自动加载到仅反射上下文中".所以在你的AppDomain.ReflectionOnlyResolve事件处理程序中,你必须通过Assembly.ReflectionOnlyLoad()加载'System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'.您应该从ResolveEventArgs的Name属性获取依赖的程序集名称

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

注意:ReflectionOnlyLoad()仅加载GAC中的程序集.您可以使用ReflectionOnlyLoadFrom直接加载DLL.