调用* ATTEMPTED *程序集解析的AppDomain事件

时间:2011-07-10 14:22:49

标签: c# .net-assembly assembly-loading

是否有一个我们可以挂钩的事件,被称为 BEFORE 一个程序集被解析。

例如,如果AppDomain中的某些代码调用Assembly.Load(path),则会引发该事件,说明是否尝试加载此程序集?

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

不,没有这样的事件。一种可能的方法是故意错误配置AppDomainSetup.ApplicationBase属性,以便CLR永远不会找到任何程序集。在这种情况下,将触发AppDomain.AssemblyResolve事件,允许您实现自己的程序集解析方案。

答案 1 :(得分:1)

从文档中可以看出,在此过程开始时没有发生任何事件。因此,我建议(如果可能的话),你写了类似下面的东西,并在整个过程中使用它:

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

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

显然,您可能希望在该委托中使用适当的对象(而不仅仅是路径)以防止加载程序集或执行不同的操作。