インターフェイス、抽象クラス、列挙型、構造体など、特定の型が依存しているすべての型を見つけようとしています。アセンブリをロードし、その中で定義されているすべての型のリストを出力したいと思います。それらの依存関係。
これまでのところ、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をロードして参照をスキャンすることで実行できることはわかっていますが、もっと良い方法があると確信しています。理想的には、匿名の内部クラスでも機能します。
同じアセンブリで複数のモジュールが定義されている場合にも機能するはずです。