質問

Microsoft .NET アセンブリ mscorlib.dll にある約 25 種類のリストがあり、クラスとそのメンバーの IL 署名を抽出する必要があります。タイプごとに 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
役に立ちましたか?

解決

赤いゲートリフレクターを使用すると、カットアンドペーストがはるかに速くなります。

他のヒント

MethodInfo にある情報からメソッド シグネチャを再構築できます。GetMethodBody は必要ありません。そこには署名情報がありません。MemberInfo.Name、MemberInfo.ReturnType、MemberInfo.GetParameters() など。それはすべてそこにあります。

IL から署名を取得する場合は、何らかの署名パーサーを作成する必要があります。David Broman が MSDN コード ギャラリーにサンプルを投稿しています ここ. 。これは完全には機能しません (具体的には、ジェネリックのサポートを追加する必要があります) が、有利なスタートを切ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top