私がしたいことは、C#コードを読み取り、解析し、いくつかのメソッド呼び出しを挿入して最終的にコンパイルすることです。C#コードをプログラムで解析して変更する方法
C#のソースコード(文字列のリスト)をCodeDOMオブジェクトに変換できますか?
私がしたいことは、C#コードを読み取り、解析し、いくつかのメソッド呼び出しを挿入して最終的にコンパイルすることです。C#コードをプログラムで解析して変更する方法
C#のソースコード(文字列のリスト)をCodeDOMオブジェクトに変換できますか?
を試してみてください。あなたは、サードパーティを使用するか、またはアドオンツール、例えばする必要があります。
Try Linq over C#素晴らしいです。
CSharpCodeProviderがお探しのものである可能性があります。
NO。私はCSharpCodeProviderが私が上で説明したことをすることができるとは思わない。 – ulrichb
は、コアの.NET Frameworkでこれを行うには、直接ことはできませんMono.Cecil
しかし、ソースコードは扱いません。それとも? –
正しいですが、ILだけを扱っています。 NRefactory(#DevelopプロジェクトのC#とVB.NETのパーサー)を使用することもできます。 –
あなたは、解析する機能が必要な場合C#ソースコード(または他のさまざまな言語)で任意の解析と変換を実行するには、The DMS Software Reengineering Toolkitをチェックしてください。
DMSは、解析されたコード(CodeDomではなく)の完全な抽象構文木を構築し、ASTのウォーク/チェック/変更のための完全な手続き型APIを提供します。ツリーを修正した後、元のスペーシングを維持しようとする忠実度モードまたは完全に制御できるプリテイプリント・スタイルを適用するプレット・プリント・モードのいずれかで、変更されたツリーに対応するソース・コードを再生成できます。コメントは再生されたソースに正しく保持されます。
さらに、DMSはソースレベルのパターンマッチングと変換を提供します(例えば、 "x = x + 1 ==> x ++"と書くことができます)。ツリーは変更されます)。
これは本当に古い質問ですが、受け入れられた回答はもう適用されなくなりました。 Microsoftの最近のRoslynプロジェクトは、静的解析の過程でコンパイラがコードベースについて得た知識をすべて公開し、これらの情報をすべてマネージドAPIを介して公開することを明示的に目的としています。 VBとC#の両方で利用できます。
あなたは、静的解析情報を消費したいので、あなたは、ドキュメントにsamples and walkthroughsページでMicrosoft.CodeAnalysis
NuGetパッケージ(あなたがC#のために必要なものはMicrosoft.CodeAnalysis.CSharp
名前空間の下にある)といくつかの時間が必要になります。
しかし、なぜですか? C#コンパイラはCodeDOMを使用しませんか? – ulrichb
いいえ、そうではありません。 CodeDomはマネージドアプリケーション開発者向けです。 csc.exeは.NET依存関係のないアンマネージコードです。 – bobbymcr