2

我有一些代码循环遍历当前加载到在 ASP.NET 应用程序中运行的 AppDomain 的类型。这是我获取程序集的方法:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

当应用程序第一次启动时没有问题,并且我期望的所有类型都存在。但是,当我更新 Web.config 或终止 w3p.exe 进程(或该进程因任何原因被回收)时,只有我期望的某些类型可用。当我使用调试器单步执行时,我注意到私有搜索路径(我的应用程序的 bin 目录)中的某些程序集尚未加载。我假设所有程序集都在应用程序启动时加载并重新启动,无论它们是否立即需要。但是在重新启动的情况下,除非这些程序集文件已更新,否则这似乎不会发生。

我需要的是在启动时收集类型信息以供以后使用。但是由于在重新启动期间类型不可用,因此稍后需要使用类型信息时会产生严重破坏。那么考虑到这一点,我该如何解决或解决这个缺陷呢?

4

3 回答 3

4

程序集是按需加载的,因此您可能还没有使用这些程序集中包含的任何类型。

于 2009-09-09T23:46:47.813 回答
3

您可以使用

AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();

这样,您将获得从调用这些方法的程序集引用的所有程序集。

于 2009-09-10T22:41:16.803 回答
2

作为启动的一部分,您可以显式加载您关心的程序集吗?

您必须提前知道您需要哪些组件。

扫描文件系统以找出与您的应用程序一起提供的程序集可能是一个有用的想法,但它对 GAC 加载的程序集没有帮助......

于 2009-09-10T05:04:44.817 回答