.net程序集解析处理程序在一台计算机上失败,但在另一台计算机上成功
我注意到.net在两台不同的机器上解析程序集的方式有所不同。在一台机器中,它似乎是在逐行执行,而在另一台机器中则是按方法执行 假设我在.net程序集解析处理程序在一台计算机上失败,但在另一台计算机上成功,.net,assembly-resolution,assemblyresolve,.net,Assembly Resolution,Assemblyresolve,我注意到.net在两台不同的机器上解析程序集的方式有所不同。在一台机器中,它似乎是在逐行执行,而在另一台机器中则是按方法执行 假设我在Test.dll中有以下内容: public class Test() { static Test() { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } private static Assembly Curr
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\u AssemblyResolve
,然后在if
逻辑内部进行本地解析
坏机器会发生什么:
Dep.dll
需要解析,因此在进入解析方法之前,它会注意到存在于另一个程序集(与Dep.dll
相同)中的方法被调用,并最终导致StackOverflowException
有人能解释为什么会这样吗
(代码在.net 4.5中运行)