首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppDomain.GetAssemblies与BuildManager.GetReferencedAssemblies的区别

AppDomain.GetAssemblies与BuildManager.GetReferencedAssemblies的区别
EN

Stack Overflow用户
提问于 2010-03-19 21:52:28
回答 1查看 12.9K关注 0票数 35

我只是想知道在一个完全信任的asp.net MVC2应用程序的上下文中,这两者之间是否有什么不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-20 01:43:06

.NET框架推迟将程序集加载到当前AppDomain中,直到需要它们。例如,如果仅从SomeMethod()调用第三方库,则通常直到SomeMethod()第一次运行时才会加载第三方DLL。

AppDomain.GetAssemblies()将为您提供已加载到当前AppDomain中的所有程序集。BuildManager.GetReferencedAssemblies() (此方法仅在.Net框架System.Web.dll中可用)返回从Web.config和其他地方引用的所有程序集的列表,并将这些程序集加载到当前AppDomain中。

下面是上面的一个解决方案的例子。

  1. SomeMethod()尚未运行。
  2. 调用AppDomain.GetAssemblies()返回不包含
    1. SomeMethod()的集合,返回包含ThirdParty.dll.

    的集合AppDomain.GetAssemblies()

在本例中,CLR推迟将ThirdParty.dll加载到当前AppDomain中,直到绝对必要。因为它是执行SomeMethod()所必需的,所以它就是在这个时候加载的。

或者:

  1. SomeMethod()尚未运行。
  2. 调用AppDomain.GetAssemblies(),返回不包含ThirdParty.dll.
  3. Call BuildManager.GetReferencedAssemblies()的集合,返回包含ThirdParty.dll.
  4. Call BuildManager.GetReferencedAssemblies()的集合,返回包含
  5. 的集合

在这里,即使您从未调用过SomeMethod(),但对BuildManager.GetReferencedAssemblies()的调用会代表您将第三方库加载到当前的AppDomain中。

当然,这一切都要经过一定的优化,等等,但总体思路是成立的。

票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2477787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档