为“尝试”程序集解析而调用的AppDomain事件
本文关键字:调用 AppDomain 事件 尝试 程序集 | 更新日期: 2023-09-27 18:01:45
在程序集解析之前,是否有一个事件可以被调用 ?
例如,如果AppDomain中的某些代码正在调用assembly . load (path),则会引发该事件,说明该程序集正在尝试加载?
这对于重定向在某些组件中硬编码的可能的汇编负载非常有用。
如果可能的话,也可以从配置中执行此操作。
有什么建议吗
不,没有这个事件。一种可能的破解方法是故意错误配置AppDomainSetup。ApplicationBase属性,以便CLR永远无法找到任何程序集。在这种情况下,AppDomain。将触发AssemblyResolve事件,从而允许您实现自己的程序集解析方案。
从文档中可以看出,在此流程开始时没有抛出任何事件。因此,我建议(如果可能的话)您编写如下内容并自始至终使用:
public static class AssemblyLoader
{
public delegate void LoadDelegate(string path);
public void LoadAssembly(string path)
{
if(OnPreLoad != null)
OnPreLoad(path);
// load assembly here
} // eo LoadAssembly
public event LoadDelegate OnPreLoad;
} // eo AssemblyLoader
然后,当您想要加载程序集时,可以在代码中的任何地方使用此方法。
显然,您可能希望在该委托中使用适当的对象(而不仅仅是路径)来防止程序集的加载或做一些不同的事情。