我注意到 .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 中运行)