C# ReflectionOnly加载上下文的问题
我试图通过将某些DLL加载到ReflectionOnly上下文中来加速我的应用程序 此加载发生在次要AppDomain上,后者同时注册AssemblyResolve和AssemblyReflectionOnlyResolve事件处理程序 由于某些原因,加载这些程序集时,此方法的代码失败:C# ReflectionOnly加载上下文的问题,c#,.net,reflection,C#,.net,Reflection,我试图通过将某些DLL加载到ReflectionOnly上下文中来加速我的应用程序 此加载发生在次要AppDomain上,后者同时注册AssemblyResolve和AssemblyReflectionOnlyResolve事件处理程序 由于某些原因,加载这些程序集时,此方法的代码失败: Type[] tps = dll.GetTypes(); 这引发了一个异常,表示: 无法解析对程序集系统的依赖关系,版本=2.0.0.0, 区域性=中性,PublicKeyToken=b77a5c561934
Type[] tps = dll.GetTypes();
这引发了一个异常,表示:
无法解析对程序集系统的依赖关系,版本=2.0.0.0,
区域性=中性,PublicKeyToken=b77a5c561934e089',因为它没有
已预加载。使用ReflectionOnly API时,依赖
程序集必须通过预加载或按需加载
反射onlyassemblyresolve事件
当不将程序集加载到仅反射上下文中时,这是假定的
使用仅反射上下文是否有任何问题/注意事项?为什么运行时不能在GAC中找到这个程序集并像往常一样加载它?我遗漏了什么吗?来自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
}
注意:ReflectionOnlyLoad()仅加载GAC中的程序集。您可以使用ReflectionOnlyLoadFrom直接加载dll。我也设置了这个事件处理程序,正如我在原始问题中所写的那样。