如何将程序集加载到AppDomain中?

时间:2013-09-11 20:51:13

标签: c# .net compiler-construction clr .net-assembly

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

我想我想了解是否:

  1. 我保证所有项目引用的程序集都是 在我的申请开始时加载。
  2. 如果不是的话 他们被装上了?这是我第一次使用 该程序集中的类/函数?
  3. 有没有办法告诉你 如果在执行之前必须首先加载程序集,则编译时间 在我的代码中的第一行? (我知道我可以使用反射,但是我 想知道我是否可以在编译时配置它)
  4. 假设我 可以控制何时加载程序集,依赖程序如何 部件?我可以告诉执行只加载到第一/第二学位 然后动态加载其余部分?

2 个答案:

答案 0 :(得分:1)

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

我认为这会对大会决议http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

有所帮助

这是关于装配加载事件http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload.aspx

答案 1 :(得分:1)

  1. 不,保证相反:只加载启动时直接需要的程序集。
  2. 是的,只要某个类需要来自该程序集的类型信息或需要该程序集进行JIT的代码,就会尝试加载程序集。
  3. 不,在编译时没有办法强制装配加载序列而不是引用Main中每个装配的东西(注意通常目标是相反的 - 延迟加载尽可能多的装配速度加载应用程序)。
  4. 不,你无法控制自动加载(正如SimonEdström指出当CLR决定它需要一个程序集时会触发Assembly Resolve事件)。如果您知道依赖关系,则可以自己预先加载程序集。
  5. 注意:程序集不直接“依赖”,只是每个类中的类/方法相互依赖。