1

文字列変数として表される単純なステートメント(基本的にはオブジェクトに対する関数呼び出しのチェーン)を解析して、CodeDomオブジェクト(おそらくのサブクラスCodeStatement)にする必要があります。また、冗長性の少ないステートメントを使用できるように、名前空間のデフォルトのインポートをいくつか提供したいと思います。

私はいくつかの提案を見つけるためにSOとインターネットを見回しましたが、何が可能で何が不可能であり、それを行う最も簡単な方法は何であるかについてかなり混乱しています。たとえば、この質問はほとんど私が望んでいるようですが、残念ながら、私が使用しCodeSnippetStatementている実行エンジン(WFルールエンジン)ではサポートされていないようであるため、ソリューションを使用できません。

私を助ける/正しい方向に向けるのに役立つ提案はありますか?

4

2 に答える 2

2

標準の.NETライブラリの一部としてC#コードをCodeDOMオブジェクトに解析するライブラリまたは関数はありません。CodeDOMライブラリには、このために設計されたように見えるメソッドがいくつかありますが、実際には実装されていません。私の知る限り、Visual Studioで利用できる実装がいくつかあります(たとえば、デザイナーが使用します)が、それは内部的なものにすぎません。

CodeSnippetStatementは、生成されたコードに任意の文字列を配置できるようにするCodeDOMノードです。C#ソースコードを生成するためだけにCodeDOMツリーを作成する場合は、通常これで問題ありません(ソースコードジェネレーターは文字列を出力に出力するだけです)。WFエンジンが文字列内のコードを理解する必要がある場合(ソースコードを生成してコンパイルするだけでなく)、機能しCodeSnippetStatementません。

ただし、C#ソースコードの解析に使用できるサードパーティのツールがあります。私が取り組んだ1つのプロジェクトでは、NRefactoryライブラリ(SharpDevelopで使用されている)を使用しましたが、非常にうまく機能しました。解析されたコードを表すツリー(AST)が表示されます。これを、対応するCodeDOMツリーに自分で変換する必要があると思います。

于 2010-03-16T22:43:37.547 に答える
1

私はここで、自分の目的に必要なほとんどすべてをカバーしているように見えるライブラリの実装を見つけました。それがビジネスシナリオで使用するのに十分堅牢であるかどうかはわかりませんが、私の単体テストでは、私が求めることができるのはほとんどすべてです。

于 2010-03-17T15:45:33.437 に答える