【发布时间】:2011-01-04 22:36:07
【问题描述】:
我正在尝试查找给定类型所依赖的所有类型,包括接口、抽象类、枚举、结构等。我想加载一个程序集,并打印出其中定义的所有类型的列表它,以及它们的依赖关系。
到目前为止,我已经能够使用 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 并扫描它以查找引用来完成,但我确信有更好的方法。理想情况下,它也适用于匿名内部类。
如果在同一个程序集中定义了多个模块,它也应该可以工作。
【问题讨论】:
标签: c# clr cil mono.cecil