none
GetMethodBodyを動的メソッドに対して実行したい RRS feed

  • 質問

  • プログラム内のメソッドに対してGetMethodBody()でMethodBodyを取得してILの情報を取得することは可能です。

    var 取得したmethodBody=typeof(クラス名).GetMethod("メソッド名").GetMethodBody();

    しかしDynamicMethodにより作った動的メソッドに対しては実行できません。

    var d=new DynamicMethod(.......);
    var 作ったデリゲート=d.CreateDelegate(typeof(デリゲートクラス))as デリゲートクラス;
    var 取得したMethodBody=作ったデリゲート..Method.GetMethodBody();
    ここでInvalidOperationException例外が発生します。「オブジェクトの現在の状態に問題があるため、操作は有効ではありません。」
    動的メソッドに対してGetMethodBodyを実行する方法はないでしょうか?
    2008年11月27日 21:59

回答

  •  和和和 さんからの引用
    動的メソッドに対してGetMethodBodyを実行する方法はないでしょうか?

     

    IL Visualizer を作っていた人たちの間で以前話題になっていて,結果的に動的メソッドの表示に成功していたように記憶しています.

    今ざっと検索してたどり着けたのが以下のエントリですが,IL Visualizer 方面の実装を調べてみてはいかがでしょうか?

     

    DebuggerVisualizer for DynamicMethod (Show me the IL)

     

    2008年11月29日 14:11

すべての返信

  •  和和和 さんからの引用
    動的メソッドに対してGetMethodBodyを実行する方法はないでしょうか?

     

    IL Visualizer を作っていた人たちの間で以前話題になっていて,結果的に動的メソッドの表示に成功していたように記憶しています.

    今ざっと検索してたどり着けたのが以下のエントリですが,IL Visualizer 方面の実装を調べてみてはいかがでしょうか?

     

    DebuggerVisualizer for DynamicMethod (Show me the IL)

     

    2008年11月29日 14:11
  • ありがとうございます。
    ソースをずっと見ていました。
    ExpressはデバッガでILVisualizerを使えないらしくソースを見るしかありませんでした。
    が、どうも普通にGetMethodBodyしているらしく解決には至りませんでした。

    以下は関係してそうなメソッドでした。
    DynamicMethodILProvider.GetByteArray()

    また分かりましたら経過をお伝えします。
    2008年12月9日 15:47
  • こんにちは。中川俊輔です。

     

    NyaRuRuさん、回答ありがとうございます。

     

    和和和さん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、NyaRuRuさんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします!

    それでは。

    2008年12月11日 6:48