reflection - C# 从引用的库中获取所有类型
问题描述
我正在尝试构建一个依赖管理工具。所以我需要从所有库中获取所有类。
有三个用 C# 编写的项目,.NET Core 3.0。
- 项目A
- 项目B
- 项目C
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 运行)
解决方案
我有一个解决方案:
只需从条目程序集开始构建依赖关系树:
// 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
方法
推荐阅读
- typescript - 比较 Angular/Typescript 中的两个对象时出错
- google-sheets - Dialogflow 与谷歌表格集成
- c++ - 如何在opencv c ++中合并(缝合)2个没有黑点的图像
- excel - 通过列中的多个条件将数据从一个工作表复制到另一个工作表
- c++ - 函数不能正确计算文件中的整数?
- html - 在图像的 4 个角对齐复选框
- c# - 检索按钮相对于控件的位置
- c# - 当列表框中的选择发生变化时更新图像 - WPF
- php - 在控制器中读取表格(laravel 5.8)
- c++ - “错误:没有匹配函数调用'std::priority_queue
::priority_queue(int)' priority_queue pqueue(4); "