程序集是如何加载到AppDomain中的?

问题描述 投票:0回答:2

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

我想我想了解是否:

  1. 我保证所有项目引用的程序集都将 在我的应用程序开始时加载。
  2. 如果没有,具体什么时候做 他们被加载了吗?这将是我第一次使用 该程序集中的类/函数?
  3. 有没有办法告诉 编译时间(如果必须在执行之前首先加载程序集) 我的代码的第一行? (我知道我可以使用反射,但我 想知道我是否可以在编译时配置它)
  4. 假设我 可以控制程序集何时加载,那么依赖的呢 集会?我可以告诉执行只加载第一/第二度吗 让其余的动态加载?
c# .net clr .net-assembly
2个回答
2
投票
  1. 不,你保证相反:只加载启动时直接需要的程序集。
  2. 是的,一旦某个类需要来自该程序集的类型信息或需要对该程序集进行 JIT 处理的代码,就会尝试加载程序集。
  3. 不,在编译时没有办法强制程序集加载顺序不引用
    Main
    中每个程序集的某些内容(请注意,通常目标是相反的 - 延迟加载尽可能多的程序集以加快加载应用程序)。
  4. 不,您无法控制自动加载(正如 Simon Edström 指出的那样,当 CLR 决定需要程序集时会触发 Assembly Resolve 事件)。如果您知道依赖关系,您始终可以自己预加载程序集。

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


1
投票

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

我认为这会对您有关 Assembly Resolve 有所帮助 http://msdn.microsoft.com/en-us/library/system.appdomain.assembleresolve.aspx

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

© www.soinside.com 2019 - 2024. All rights reserved.