什么控制装配程序的顺序?

时间:2016-07-20 16:47:08

标签: c# .net clr .net-assembly jit

考虑一个引用两个程序集FooAssemblyBarAssembly的控制台应用程序(除系统程序集外)。此外,BarAssembly引用FooAssembly。我为应用程序AssemblyLoad的{​​{1}}事件添加了一个处理程序,其中包含一个断点,以查看程序集的加载顺序。这是我的代码:

AppDomain

通过此设置,public class Program { static Program() { AppDomain.CurrentDomain.AssemblyLoad += OnLoad; } static void OnLoad(object sender, AssemblyLoadEventArgs e) { // do nothing, but include break-point } static void Main(string[] args) { FooAssembly.FooClass f = new FooAssembly.FooClass(); BarAssembly.BarClass b = new BarAssembly.BarClass(); } } 首先加载,FooAssembly加载第二。

但是,当我将Main方法更改为:

BarAssembly

static void Main(string[] args) { BarAssembly.BarClass b = new BarAssembly.BarClass(); FooAssembly.FooClass f = new FooAssembly.FooClass(); } 首先加载,BarAssembly加载第二。

而且:

FooAssembly

static void Main(string[] args) { BarAssembly.BarClass b = new BarAssembly.BarClass(); } 首先加载,BarAssembly加载第二。

所以在我看来,JIT编译器按照它需要编译的方法(在这种情况下为FooAssembly)引用它们来加载程序集。

为什么Main总是先加载FooAssembly,因为BarAssembly也引用它?

我对使用延迟加载程序集的AppDomains概念比较陌生,所以任何解释和/或文档都会受到赞赏,谢谢。

0 个答案:

没有答案