.net程序集解析处理程序在一台机器上失败但在另一台机器上成功

时间:2015-11-09 03:02:11

标签: .net assembly-resolution assemblyresolve

我注意到.net如何解决2台不同机器中的程序集的差异。在一台机器中,它似乎是在逐行执行并且在每个方法的另一台机器中执行它。

假设我在Test.dll中有以下内容:

public class Test()
{
    static Test()
    {
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    }

    private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (args.Name == "Dep.dll")
        {
            return LocalMethodThatResolves(args); // local method in this class
        }
        else
        {
            return HelperInDependentAssembly.Resolve(args); // this method lives in Dep.dll
        }
    }
}

好机器会发生什么:

需要解析Dep.dll,以便它进入CurrentDomain_AssemblyResolve,然后在if逻辑内处理,然后在本地解析。

坏机器会发生什么:

Dep.dll需要解析,所以在进入resolve方法之前,它会注意到对一个方法的调用,该方法存在于另一个程序集(相同的Dep.dll)中,最终是{{1 }}

任何人都可以解释为什么会发生这种情况?

(代码在.net 4.5中运行)

0 个答案:

没有答案