首页 > 解决方案 > C# 从引用的库中获取所有类型

问题描述

我正在尝试构建一个依赖管理工具。所以我需要从所有库中获取所有类。

有三个用 C# 编写的项目,.NET Core 3.0。

ProjectA 是一个可执行的控制台应用程序。

并且 ProjectA 引用 ProjectB。ProjectB 引用 ProjectC。

项目A -> 项目B -> 项目C

对于 ProjectC 中的代码:

// In ProjectC
Assembly.GetExecutingAssembly().GetTypes()
// That can list all classes in ProjectC.

对于 ProjectC 中的代码:

// In ProjectC
Assembly.GetEntryAssembly().GetTypes()
// That can list all classes in ProjectA.

但是如何列出 ProjectB 中的所有类?(ProjectC 中的代码,由 ProjectA 运行)

标签: reflection.net-core

解决方案


我有一个解决方案:

只需从条目程序集开始构建依赖关系树:

// Code this in project C. Run this by project A.

// Entry is A.
var entry = Assembly.GetEntryAssembly();

entry
    // This will get B and C with type: `AssemblyName`
    .GetReferencedAssemblies()
    // Load assembly B and C.
    .Select(t => Assembly.Load(t))
    // Get all class in B and C.
    .SelectMany(t => t.GetTypes())
    .ToList();

获取引用程序集的方法是:

Assembly.GetReferencedAssemblies方法

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.getreferencedassemblies?view=netframework-4.8


推荐阅读