0

attributes内部で使用されているものを特定することは可能MethodBodyですか?

例えば:

void method1()
{
    method2();
}

[Attr()]
void method2()
{
   // NOP
}

または関連する属性を使用していることを確認しmethod1()て判断する方法はありますか?method2()

4

2 に答える 2

0

method1コードのどこからでも呼び出しを行うmethod2のは難しく、これまでに行われたことはないと思います。なぜあなたがそれをしたいのか、私には明らかではありません。

C# でリフレクションのみを使用すると、そのmethod1呼び出しを見つけるmethod2ことができません。共通中間言語 (CIL、すべての C#、VB、F# などの命令を表すために内部で使用される言語) の生のバイナリ表現しか取得できないためです。

byte[] methodIL = typeof(Program).GetMethod("method1")
    .GetMethodBody()
    .GetILAsByteArray();

ただし、Mono Cecilは .Net アセンブリで動作するように設計されたカスタム ライブラリであり、メソッドの CIL の読み取りと操作が非常に簡単になります。それを見て、ニーズに合っているかどうかを確認できます。

于 2012-07-18T22:58:52.320 に答える
0

あなたの質問は非常に紛らわしく、特に最初の部分は...

MethodBody 内で使用されている属性を特定することはできますか?

... method1() が method2() を呼び出しており、method2() が属性でタグ付けされていても、その属性がmethod1() で使用されているわけではないためです。

method1() を見て、それが method2() またはそれに関連する属性を使用していると判断する方法はありますか?

短い答えは - 実行時 - いいえです。もちろん、method1() (および他のメソッドと他のメソッド) に、method2() と呼ばれることを示す何かを手動でタグ付けすることもできますが、これはあなたが求めているものではないと思います。

あなたが達成しようとしていることの文脈を正確に教えていただければ、それが役立つかもしれません.

于 2012-07-18T22:46:10.723 に答える