1

我注意到 .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最终StackOverflowException

谁能解释它为什么会发生?

(代码在 .net 4.5 中运行)

4

0 回答 0