2009-04-02 11 views
2

私はかなり簡単なコード生成ツールを作成しており、MSIL(またはMethodInfo)オブジェクトをC#ソースに変換する機能が必要です。私はReflectorがこれの素晴らしい仕事をしていることを認識していますが、それはUIだけであるという不快な「機能」を持っています。メソッドをC#ソースコードに変換する

私はちょうど直接変数を挿入するstring.Formatを使用して、C#の文字列を生成することができますが、私は実際にプログラム(例えば、デリゲートまたはMethodInfoオブジェクト)を生成することができますメソッドをC#に変換するライターに送信します。

システムライブラリによって、C#のソースコード文字列から実行時にコンパイルされた(実行可能な)メソッドに簡単に移行できますが、オブジェクトからソースコードに移動することは不可能です簡単なこと。

アイデア?

答えて

0

私がアプリケーションの一部として書いたコードジェネレータはString.Formatを使用していますが、私はString.Format(Lispマクロはいつでもそれを打ち負かしています)には全く満足していません。 C#コンパイラは、生成されたすべてのメソッドを再チェックするため、Reflection.Emitと(まだ未書き込みの)MSIL-C#デコンパイラをラウンドトリップすることによって何も得られません。

PS:何かヘビー級を使用する場合は、CodeDOMを使用してみませんか?

+0

hi。 CodeDomはコードを生成するのに便利ですが、ソースコードからCodeDomオブジェクトへの解析をサポートしていません。 –

+0

@DavidDaoあなたはRoslynを使うことができます。 –

1

このadd-in for Reflectorはファイルに出力することができ、コマンドラインからReflectorを実行することができます。おそらく、自分自身の逆コンパイラを動かすよりも、自分が望むことをする方が簡単です。

Anakrinoは、コマンドラインオプション付きの別の逆コンパイラですが、.NET 1.1以降には更新されていません。しかし、オープンソースなので、あなたのソリューションの基盤となるかもしれません。

関連する問題