为“尝试”程序集解析而调用的AppDomain事件

本文关键字:调用 AppDomain 事件 尝试 程序集 | 更新日期: 2023-09-27 18:01:45

在程序集解析之前,是否有一个事件可以被调用 ?

例如,如果AppDomain中的某些代码正在调用assembly . load (path),则会引发该事件,说明该程序集正在尝试加载?

这对于重定向在某些组件中硬编码的可能的汇编负载非常有用。

如果可能的话,也可以从配置中执行此操作。

有什么建议吗

为“尝试”程序集解析而调用的AppDomain事件

不,没有这个事件。一种可能的破解方法是故意错误配置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

然后,当您想要加载程序集时,可以在代码中的任何地方使用此方法。

显然,您可能希望在该委托中使用适当的对象(而不仅仅是路径)来防止程序集的加载或做一些不同的事情。