是否有一个我们可以挂钩的事件,在解决程序集之前被调用。
例如,如果 AppDomain 中的某些代码正在调用 Assembly.Load(path) ,则会引发该事件,表示尝试加载此程序集?
这对于重定向在某些组件中硬编码的可能的装配负载很有用。
如果可能的话,从配置中执行此操作也是一个有效的选项。
有什么建议么 ?
是否有一个我们可以挂钩的事件,在解决程序集之前被调用。
例如,如果 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
然后,当您想要加载程序集时,您可以在代码中的任何位置使用此方法。
显然,您可能希望在该委托(不仅仅是路径)中使用适当的对象来防止加载程序集或执行不同的操作。