1

v4.5 C#/。NETアプリケーションを構築していて、どのメソッドがメソッドに依存しているかを見つける必要があります。それらのメソッドをリストアップしたいと思います。

たとえば、クラスにメソッドがあり、このメソッドが別のメソッドを使用している場合:

public void Test()
{
    CallMethodA();
    CallMethodB();
}

メソッドTestをアプリケーションに渡すときに、リフレクションを介してCallMethodAとCallMethodBを出力するようにします。

これまでのところ、私はこれを作成しました:

MethodBase methodBase = typeof(TestClass).GetMethod("Test");
var instructions = MethodBodyReader.GetInstructions(methodBase);

foreach (Instruction instruction in instructions)
{
    MethodInfo methodInfo = instruction.Operand as MethodInfo;

    if(methodInfo != null)
    {

    }
}
4

2 に答える 2

2

Mono.Cecilは、開始するのに適した場所です。この質問には、回答にリンクされた多くのチュートリアルがあります。

ただし、これは静的分析、つまりコンパイル時のメソッド呼び出しのみを提供します。インターフェイスまたは仮想メソッドへのメソッド呼び出しがある場合、実行時に実際に呼び出されている他のメソッドはわかりません。実行時に実際に呼び出されたコードを知りたい場合は、インストルメンテーションを介してカバレッジ情報を収集する必要があります。

于 2013-01-09T19:15:26.710 に答える
0

これは、 .NET ReflectordotPeekなどの独自のアプリケーションを作成するのと非常によく似ています。クラスのメソッド内でどのような呼び出しが行われたかを知りたい場合は、Reflector のようなものを作成する必要があります。また、 ILSpyもチェックしてください。それは助けになることができます。

ILSpyについて

ILSpy は、オープン ソースの .NET アセンブリ ブラウザーおよび逆コンパイラーです。

Red Gate が .NET Reflector の無料バージョンが 2011 年 2 月末までに存在しなくなると発表した後、開発が開始されました。

于 2013-01-09T19:05:17.130 に答える