我正在尝试通过将某些DLL加载到ReflectionOnly上下文来加速我的应用程序。
此加载发生在辅助AppDomain上,该辅助AppDomain注册AssemblyResolve和AssemblyReflectionOnlyResolve事件处理程序。
出于某种原因,在加载这些程序集时,代码在此方法上失败:
Type[] tps = dll.GetTypes();
这引发了一个例外:
无法解析对程序集'System,Version = 2.0.0.0的依赖性, Culture = neutral,PublicKeyToken = b77a5c561934e089'因为它没有 已预装。使用ReflectionOnly API时,依赖 组件必须通过预先加载或按需加载 ReflectionOnlyAssemblyResolve事件。
将程序集加载到Reflection Only上下文时,这可以按照假设进行。
使用“仅反射”上下文是否存在任何问题/警告?为什么运行时不能在GAC中找到此程序集并像往常一样加载它?我错过了什么吗?
答案 0 :(得分: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
}
注意:ReflectionOnlyLoad()仅加载GAC中的程序集。您可以使用ReflectionOnlyLoadFrom直接加载dll。