繁体   English   中英

程序集如何加载到AppDomain中?

[英]How are assemblies loaded into the AppDomain?

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

我想我想了解是否:

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

我不知道详细信息,但我知道无法加载程序集时会引发事件。 因此,我想它们是在运行时加载的,您可以向其中添加例程。

我认为这会帮助您一些有关Assembly Resolve的问题http://msdn.microsoft.com/zh-cn/library/system.appdomain.assemblyresolve.aspx

以及有关程序集加载事件的信息http://msdn.microsoft.com/zh-cn/library/system.appdomain.assemblyload.aspx

  1. 不,可以保证您的情况与此相反:仅加载在开始时直接需要的程序集。
  2. 是的,一旦某个类需要该程序集的类型信息或需要对该程序集进行编码的代码,就会尝试加载程序集。
  3. 不,没有办法在编译时强制程序集加载序列,而不必引用Main每个程序集的内容(请注意,通常目标是相反的-尽可能延迟加载尽可能多的程序集以加快应用程序的加载速度)。
  4. 不,您不能控制自动加载(正如SimonEdström指出的那样,当CLR决定需要组装时,会触发那里的Assembly Resolve事件)。 如果您知道依赖关系,则始终可以自己预加载程序集。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM