gpt4 book ai didi

c# - 如何使用 CoreClr 获取已加载程序集中的所有类型?

转载 作者:行者123 更新时间:2023-11-30 18:22:23 31 4
gpt4 key购买 nike

在我的应用程序中,我需要获取加载的所有类型的列表,而不管它们包含在什么程序集中。例如,项目 A 可能需要获取实现接口(interface) A 的所有类型的列表即使该实现存在于项目 B 中。

在 .Net Framework 中,我会通过查询当前应用程序域中的所有程序集来执行此操作。

既然应用程序域的概念在 CoreCLR 中似乎已经消失,那么实现这一目标的正确方法是什么?

最佳答案

当在 RC1-Update1 中的 DNX 下运行时(注意直接在 dotnet.exe 下运行时的异常行为):

var assemblies = PlatformServices.Default.LibraryManager.GetLibraries().SelectMany(l => l.Assemblies.Select(an =>
{
try
{ return Assembly.Load(an); }
catch (ReflectionTypeLoadException)
{ return null; }
})).Where(a => (object)a != null);

有关实际工作示例,请参阅 AssemblyLoaderContainerContext.cs在我的 GitHub 上的 TextMteal 项目中。

还值得注意的是,“获取实现 X 接口(interface)的所有类型”的幼稚尝试将无法查看类型的接口(interface)映射。幸运的是,对于 Core CLR,TypeInfo 公开了 ImplementedInterfaces,与之前的 .NET 完整框架(System.Runtime 之前)相比,这大大简化了这项任务。

关于c# - 如何使用 CoreClr 获取已加载程序集中的所有类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050217/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com