我只是想知道在一个完全信任的asp.net MVC2应用程序的上下文中,这两者之间是否有什么不同。
发布于 2010-03-20 01:43:06
.NET框架推迟将程序集加载到当前AppDomain中,直到需要它们。例如,如果仅从SomeMethod()调用第三方库,则通常直到SomeMethod()第一次运行时才会加载第三方DLL。
AppDomain.GetAssemblies()将为您提供已加载到当前AppDomain中的所有程序集。BuildManager.GetReferencedAssemblies() (此方法仅在.Net框架System.Web.dll中可用)返回从Web.config和其他地方引用的所有程序集的列表,并将这些程序集加载到当前AppDomain中。
下面是上面的一个解决方案的例子。
SomeMethod()尚未运行。AppDomain.GetAssemblies()返回不包含SomeMethod()的集合,返回包含ThirdParty.dll.的集合AppDomain.GetAssemblies()
在本例中,CLR推迟将ThirdParty.dll加载到当前AppDomain中,直到绝对必要。因为它是执行SomeMethod()所必需的,所以它就是在这个时候加载的。
或者:
SomeMethod()尚未运行。AppDomain.GetAssemblies(),返回不包含ThirdParty.dll.BuildManager.GetReferencedAssemblies()的集合,返回包含ThirdParty.dll.BuildManager.GetReferencedAssemblies()的集合,返回包含在这里,即使您从未调用过SomeMethod(),但对BuildManager.GetReferencedAssemblies()的调用会代表您将第三方库加载到当前的AppDomain中。
当然,这一切都要经过一定的优化,等等,但总体思路是成立的。
https://stackoverflow.com/questions/2477787
复制相似问题