我希望能够找到一个给定类型所依赖的所有类型,包括接口、抽象类、枚举和结构体等。我想加载一个程序集,并打印出其中定义的所有类型及其依赖关系。
到目前为止,使用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);
}
这个列表也可以使用mono反汇编器获得,例如"monodis SomeAssembly.dll --typeref",但是这个列表似乎不包括基元类型,例如System.Void,System.Int32等。
我需要单独处理每种类型,并获取给定类型所依赖的所有类型,即使这些类型在同一个程序集中定义。是否有任何使用Mono.Cecil或其他项目来实现此目的的方法?
我知道可以通过加载程序集,然后迭代每个定义的类型,然后加载该类型的IL并扫描其引用来完成此操作,但我相信有更好的方法。理想情况下,它还将适用于匿名内部类。
如果在同一个程序集中定义了多个模块,它也应该起作用。