gpt4 book ai didi

c# - ReflectionOnly 加载上下文的问题

转载 作者:行者123 更新时间:2023-11-30 20:07:00 27 4
gpt4 key购买 nike

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

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

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

Type[] tps = dll.GetTypes();

这会抛出一个异常:

Cannot resolve dependency to assembly 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.

当不将程序集加载到 Reflection Only 上下文中时,这会按假设工作。

使用仅反射上下文是否有任何陷阱/注意事项?为什么运行时无法在 GAC 中找到此程序集并照常加载它?我错过了什么吗?

最佳答案

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

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

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

关于c# - ReflectionOnly 加载上下文的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com