複数のアセンブリで、特定のメソッドの上流の呼び出し元をすべて見つけたいと思います。
レイト バインド参照や仮想メソッド呼び出しを解決する必要はありません。シンプルで直接的な CILcall
参照で問題ありません。
私はいくつかのオプションを見てきました:
- Reflector: ツールの Analyzer 部分は、拡張ポイントとして公開されていません。
- FxCop:
CallGraph
クラスを実行するには、FxCop コンテキストが必要です。 - Roslyn: どこから始めればいいのかわかりませんが、とにかくソースから始めることに興味はありません。アセンブリを提供して、代わりにバイトコードとメタデータを操作したいと考えています。
- VS アドイン: Reflector と同様に、Call Hierarchy ツールはアドインに公開されません。
私の唯一の解決策は、アセンブリ内のすべてのメソッドを反復処理call
し、ソース メソッドへの命令を探し、呼び出し元メソッドごとにプロセスを再帰的に繰り返すことです。
私の提案した解決策が進むべき道であると仮定すると、それを行うための最良の方法は何ですか? MethodInfo.GetMethodBody().GetILAsByteArray()
少しハードコアなようです。CIL の操作を簡単にするライブラリはありますか (ASM for Java など)。