11

私がやりたいのは、C#コードを読み取り、解析し、いくつかのメソッド呼び出しを挿入して、最後にコンパイルすることです。

C#ソースコード(文字列のリスト)をCodeDOMオブジェクトに変換することは可能ですか?

4

6 に答える 6

9

これは本当に古い質問ですが、受け入れられた答えはもはや適用されないことに注意する価値があります。Microsoftの最近のRoslynプロジェクトは、コードベースを静的に分析する過程でコンパイラがコードベースについて得たすべての知識を公開し、マネージドAPIを介してこのすべての情報を公開することを明確に目的としています。VBとC#の両方で使用できます。

静的分析情報を利用したいので、Microsoft.CodeAnalysisNuGetパッケージ(C#に必要なものはMicrosoft.CodeAnalysis.CSharp名前空間の下にあります)と、ドキュメントのサンプルとウォークスルーのページが必要になります。

于 2015-06-04T23:09:57.693 に答える
6

コアの.NETFrameworkでこれを直接行うことはできません。次に、サードパーティまたはアドオンツールを使用する必要があります。

于 2009-10-03T17:19:45.590 に答える
2

C#でLinqを試してください。素晴らしいです。

于 2009-10-03T16:17:47.103 に答える
0

Mono.Cecilをお試しください

于 2009-10-03T16:33:02.533 に答える
0

C#ソースコード(または他のさまざまな言語)を解析し、任意の分析と変換を実行する機能が必要な場合は、DMSソフトウェアリエンジニアリングツールキットを確認してください。

DMSには完全なC#フロントエンドがあり、解析されたコード(CodeDomではない)の完全な抽象構文ツリーを構築し、ASTのウォーク/チェック/変更のための完全な手続き型APIを提供します。ツリーを改訂した後、DMSは、元の間隔を維持しようとする忠実度モード、または完全に制御できるプリティプリントスタイルを適用するプリティプリントモードのいずれかで、変更されたツリーに対応するソースコードを再生成できます。コメントは、再生成されたソースに適切に保持されます。

さらに、DMSは、ソースレベルのパターンマッチングと変換を提供します(たとえば、すべてのウォークアラウンドツリーをコーディングして検証する代わりに「x = x + 1 ==> x ++」と記述し、ツリーをハックして変更することができます。 )プログラム変換に関する記事を参照して、これがはるかに少ない作業である理由を理解してください。

于 2009-10-03T17:21:35.187 に答える
-2

CSharpCodeProviderはあなたが探しているものかもしれません

于 2009-10-03T16:32:57.807 に答える