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