我有一些代码循环遍历当前加载到在ASP.NET应用程序中运行的AppDomain的类型。以下是我获得装配的方法:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
当应用程序首次启动时,没有问题,我期望的所有类型都存在。但是当我更新Web.config或杀死w3p.exe进程(或者进程因任何原因而被回收)时,只有一些我期望的类型可用。当我使用调试器时,我注意到私有搜索路径(我的应用程序的bin目录)中的某些程序集尚未加载。我假设所有程序集都在应用程序启动时加载并重新启动,无论它们是否立即需要。但是在重新启动的情况下,这似乎不会发生,除非那些汇编文件已经更新。
我需要的是在启动时收集类型信息以供日后使用。但是,由于在重新启动期间类型不可用,因此在需要使用类型信息时会严重破坏。那么考虑到这一点,我该如何解决或解决这个缺陷?
答案 0 :(得分:4)
按需加载程序集,因此您可能尚未使用这些程序集中包含的任何类型。
答案 1 :(得分:3)
您可以使用
AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();
这样,您将获得从您调用这些方法的程序集中引用的所有程序集。
答案 2 :(得分:2)
作为创业的一部分,你能explicitly load你关心的集会吗?
您必须提前知道您需要哪些装配。
扫描文件系统以找出随应用程序一起发货的程序集可能是一个有用的想法,但它对GAC加载的程序集没有帮助......