コンパイルのさまざまな段階でソースを出力するように C# コンパイラに指示する方法はありますか: シンタックス シュガーを削除した後のソース、...、IL.
おそらくいくつかのツール (Resharper?) がこれを行うのですが、どのように行うのか知りたいです。
コンパイルのさまざまな段階でソースを出力するように C# コンパイラに指示する方法はありますか: シンタックス シュガーを削除した後のソース、...、IL.
おそらくいくつかのツール (Resharper?) がこれを行うのですが、どのように行うのか知りたいです。
いいえ、ありません。C# コンパイラは中間出力を生成しません。エラー/警告またはアセンブリのいずれかが生成されます。
IL を取得するには、ildasm を使用します。これは、アセンブリの生の IL を表示する .Net に同梱されているツールです。
コンパイルのさまざまな段階でソースを出力するように C# コンパイラに指示する方法はありますか: シンタックス シュガーを削除した後のソース、...、IL.
Jared が正しく指摘しているように、確かに IL を見ることができます。現時点では、コンパイラはその分析に関するこれ以上の情報を公開していません。
Jon が正しく指摘しているように、Roslyn コンパイラはそうします。Roslyn は、完全な構文解析をツリー形式で公開します。ただし、 「下位ツリー」の形式で構文または意味変換を公開する予定はありません。(たとえば、クエリ内包表記はメソッド呼び出しに、foreach ループは while ループに、using ステートメントは try-finally ステートメントに、などです。)
セマンティック分析エンジンのクエリを実行できるようにする API を公開する計画があります。たとえば、「このプログラムの構文解析を教えてください」と言ってから、「OK、構文解析のこのノードは式です。その型は何ですか?」と言うことができます。または、「この呼び出しが実際に呼び出すメソッドについて、オーバーロードの解決によって何が決定されたのでしょうか?」等々。
また、フロー分析エンジンのクエリを実行できる API を公開する予定です。たとえば、構文ツリーを使用して、「このメソッドのこのコード ブロックが与えられた場合、制御がブロックに入る前に割り当てられなかったが、制御が終了した後に割り当てられるローカル変数は?」と尋ねることができます。
このような分析が必要な場合は、Roslyn のプレビュー リリースを取得することをお勧めします。できるだけ早くフィードバックをいただけると幸いです。ダウンロードはこちら:
http://www.microsoft.com/download/en/details.aspx?id=27746
フィードバック フォーラムは次のとおりです。
http://social.msdn.microsoft.com/forums/en-us/roslyn
Roslyn の詳細については、次を参照してください。
http://msdn.microsoft.com/en-us/roslyn
おそらくいくつかのツール (Resharper?) がこれを行うのですが、どのように行うのか知りたいです。
彼らは独自の構文解析器と意味解析器を作成します。
Microsoft のRoslynプロジェクトを調べる必要があります。ビルド プロセスを一連の豊富な API として公開します。大変な作業になると思いますが、その方法で探している情報を得ることができるはずです。
いいえ、あなたが得ることができる最高のものはILです. 一部の AOP ツール ( PostSharp など) は、IL を取得して属性コードで書き換えることで機能すると思います。なぜ聞くのですか?何かやりたいことはありますか?