Я пытаюсь найти все типы, от которых зависит данный тип, включая интерфейсы, абстрактные классы, перечисления, структуры и т. Д. Я хочу загрузить сборку и распечатать список всех типов, определенных в это, и их зависимости.
На данный момент мне удалось найти все внешние типы, от которых зависит сборка CLR, с помощью Mono.Cecil, например,
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 типа и просканировав его на наличие ссылок, но я уверен, что есть лучший способ. В идеале это также будет работать с анонимными внутренними классами.
Это также должно работать, если в одной сборке определены несколько модулей.