我试图找到给定类型所依赖的所有类型,包括接口、抽象类、枚举、结构等。我想加载一个程序集,并打印出其中定义的所有类型的列表,并且他们的依赖。
到目前为止,我已经能够使用 Mono.Cecil 找到 CLR 程序集所依赖的所有外部类型,例如
using System;
using Mono.Cecil;
using System.IO;
FileInfo f = new FileInfo("SomeAssembly.dll");
AssemblyDefinition assemDef = AssemblyFactory.GetAssembly (f.FullName);
List<TypeReference> trList = new List<TypeReference>();
foreach(TypeReference tr in assemblyDef.MainModule.TypeReferences){
trList.Add(tr.FullName);
}
该列表也可以使用单反汇编器获得,例如“monodis SomeAssembly.dll --typeref”,但该列表似乎不包括原语,例如 System.Void、System.Int32 等
我需要单独处理每种类型,并获取给定类型所依赖的所有类型,即使这些类型是在同一个程序集中定义的。有没有办法使用 Mono.Cecil 或任何其他项目来做到这一点?
我知道这可以通过加载程序集,然后迭代每个定义的类型,然后加载该类型的 IL 并扫描它以查找引用来完成,但我确信有更好的方法。理想情况下,它也适用于匿名内部类。
如果在同一个程序集中定义了多个模块,它也应该工作。