繁体   English   中英

为什么有些.Net程序集不能通过AppDomain的GetAssemblies()方法获得?

[英]Why are some .Net assemblies not available via an AppDomain's GetAssemblies() method?

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

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

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

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

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

您可以使用

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM