1

什么决定了程序集何时以及是否加载到 AppDomain 中。

我想我想了解是否:

  1. 我保证所有项目引用的程序集都将在我的应用程序开始时加载。
  2. 如果不是,它们究竟什么时候被加载?这将是我第一次使用该程序集中的类/函数吗?
  3. 有没有办法在编译时判断是否必须先加载程序集,然后再执行我的代码中的第一行?(我知道我可以使用反射,但我想知道我是否可以在编译时配置它)
  4. 假设我可以控制何时加载程序集,那么依赖程序集呢?我可以告诉执行只加载 1 度/2 度并让其余部分动态加载吗?
4

2 回答 2

1
  1. 不,您可以保证相反:仅加载启动时直接需要的程序集。
  2. 是的,一旦某个类需要来自该程序集的类型信息或需要该程序集的代码将被 JIT 化,就会尝试加载程序集。
  3. 不,在编译时没有办法强制程序集加载序列不从您的每个程序集中引用某些东西Main(请注意,通常目标是相反的 - 延迟加载尽可能多的程序集以加快应用程序的加载)。
  4. 不,您无法控制自动加载(正如 Simon Edström 指出的那样,当 CLR 决定它需要一个程序集时,会触发 Assembly Resolve 事件)。如果您知道依赖关系,您始终可以自己预加载程序集。

注意:程序集不直接相互“依赖”,只是每个类/方法相互依赖。

于 2013-09-11T21:03:53.027 回答
1

我不知道细节,但我知道当无法加载程序集时会触发事件。所以我猜它们是在运行时加载的,你可以向它添加例程。

我认为这将有助于您了解 Assembly Resolve http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

这关于程序集加载事件http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload.aspx

于 2013-09-11T20:55:09.720 回答