ReflectionOnly加载上下文存在问题



我正试图通过将某些DLL加载到ReflectionOnly上下文中来加快我的应用程序。

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

由于某种原因,当加载这些程序集时,代码在以下方法上失败:

Type[] tps = dll.GetTypes();

这抛出了一个异常:

无法解析对程序集"System,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089',因为它没有已预加载。使用ReflectionOnly API时,依赖程序集必须通过ReflectionOnlyAssemblyResolve事件。

当不将程序集加载到"仅反射"上下文中时,这将按假设工作。

使用"仅反射"上下文是否有任何问题/注意事项?为什么运行时不能在GAC中找到这个程序集并像往常一样加载它?我是不是错过了什么?

来自MSDN:"依赖项不会自动加载到仅反射上下文中"。所以在AppDomain.ReflectionOnlyResolve事件处理程序中,您必须通过Assembly.Reflection OnlyLoad()加载"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
 }

注意:ReflectionOnlyLoad()只加载GAC中的程序集。您可以使用ReflectionOnlyLoadFrom直接加载dll。

相关内容

  • 没有找到相关文章

最新更新