クラスとそのメンバーの IL 署名を抽出する必要がある Microsoft .NET アセンブリ mscorlib.dll で見つかった約 25 の型のリストがあります。タイプごとに 1 つのファイルが必要で、各署名が 1 行に表示されます。たとえば、次のタイプを使用します。
System.Collections.Generic.Comparer<T>
その型のアセンブリから次のものを抽出したいと思います (必要のないプライベート メンバーがいくつかありますが、必要に応じて手動で処理できます)。
.class public abstract auto ansi serializable beforefieldinit System.Collections.Generic.Comparer`1<T> extends System.Object implements System.Collections.IComparer, class System.Collections.Generic.IComparer`1<!T>
.method family hidebysig specialname rtspecialname instance void .ctor() cil managed
.method public hidebysig newslot abstract virtual instance int32 Compare(!T x, !T y) cil managed
.method private hidebysig newslot virtual final instance int32 System.Collections.IComparer.Compare(object x, object y) cil managed
.property class System.Collections.Generic.Comparer`1<!T> Default() { .get class System.Collections.Generic.Comparer`1<!T> System.Collections.Generic.Comparer`1::get_Default() }
そこで、これを達成するための 4 つの方法を考えました。
各タイプの各署名を手動で切り取り、ildasm のテキスト ファイルに (直接または mscorlib.dll のダンプを介して) 貼り付けます。一部のタイプはかなり長いため、これは面倒な作業になる可能性があります。さらに多くのことを行う必要がある場合、これは間違いなく長期的な解決策ではありません。
Reflection を使用してすべての署名を取得しようとするツールを作成します。大まかに言えば、以下の疑似コード [1] のようなものを使用することを考えました。
ildasm の IL ダンプで文字列解析を使用して型を見つけて署名を取得するツールを作成する
タスクを実行するには、既存のツールを使用します。
私のタスクを達成するのに役立つ既存のツールまたはメカニズムを知っている人はいますか? そうでない場合、そのようなツールを作成するためにどの方向に進むべきかについての提案はありますか? また、それを実現する方法についてコードのアイデアがあれば、聞いていただければ幸いです。
[1]
System.Reflection.GetType(string)
Type.GetMethods() For each item in
MethodInfo, GetMethodBody()
GetILAsByteArray().ToString()
Determine a way to get just the signature from the IL