LoadFrom 和上下文

Posted

技术标签:

【中文标题】LoadFrom 和上下文【英文标题】:LoadFrom and context 【发布时间】:2012-02-02 18:37:00 【问题描述】:

我正在通过Assembly.LoadFrom 加载存储在应用程序基本路径之外的程序集 (A);我加载的程序集引用了同一目录中的另一个 .net 程序集 (B)。

当我尝试使用 A 程序集的某些方法时,Fusion 日志显示系统正在尝试从应用程序基目录而不是 A.dll 的父目录加载 B.dll。

我向AppDomain.CurrentDomain.AssemblyResolve 添加了一个侦听器,该侦听器由发送者AppDomain 调用,并显示一条消息“没有上下文策略。”,并将ResolveEventArgs.RequestingAssembly 属性设置为null

LoadFrom 不应该允许在其父目录中搜索程序集的依赖项吗?

【问题讨论】:

不,它不能那样工作(不幸的是)。我有一个类似的问题,通过拦截默认/本机加载器将是有益的。 【参考方案1】:

是的,我认为应该是这样,但 leppie 是正确的,但事实并非如此。这是关于 assembly probing sequence 的详细 MSDN 文章。有好几次我遇到了完全相同的问题,并且使用 AssemblyResolve 事件是唯一的方法。

【讨论】:

【参考方案2】:

嗯,实际上应该!它确实如此。见:

https://blogs.msdn.microsoft.com https://docs.microsoft.com

虽然 CLR 仍在尝试使用 GAC 和 appbase 目录来解决程序集 (A) 的依赖关系,但它也会查看从中加载的文件夹 (A)。

【讨论】:

以上是关于LoadFrom 和上下文的主要内容,如果未能解决你的问题,请参考以下文章

Assembly.LoadFrom加载程序集类型转换失败解决方法

什么是 .NET 程序集中的融合

LoadFile 和 LoadFrom 与 .NET 程序集的区别?

动态反射——Load,LoadFrom和LoadFile

释放 Assembly.LoadFrom 文件句柄

ASP.NET:CreateDomain(...).CreateInstanceAndUnwrap(...) 或 Assembly.LoadFrom(...).GetExportedTypes() 抛