4

C#のメモリ内コンパイラ全体が呼び出されているSOのこの質問を検討します。語彙素と構文の分析のみが必要な場合:テキストを語彙素のストリームとして解析し、それらをチェックして終了します。

System.CodeDom.Compilerの現在のバージョンで可能ですか、そうでない場合は可能ですか?

4

2 に答える 2

6

Monoを使用できる場合は、使用できる可能性のあるC#パーサー/レクサーがあると思います。

調べるためのリンクは次のとおりです。MS C#チームが何を計画しているのかについては、ある時点でC#コンパイラを「サービス」にするという話がありますが、それが何を意味するのか、いつそれが起こるのかは不明です。

于 2010-04-09T21:00:54.800 に答える
1

コードがインメモリ (CompilerParameters.GenerateInMemory) でコンパイルされているように見えるかもしれませんが、実際にはそうではありません。コード (csc.exe) のコンパイルには、Visual Studio で使用されているものと同じコンパイラが使用されます。これは CreateProcess によって開始され (Process.Start によく似ています)、プロセス外で実行されて、一時フォルダー内のディスク上のアセンブリにコードをコンパイルします。GenerateInMemory オプションは、Assembly.LoadFrom() を呼び出してアセンブリを読み込みます。

GenerateInMemory を false に設定し、完了後に OutputAssembly を削除するだけで、構文チェックと同等の結果が得られます。

これは少し後ろ向きに聞こえるかもしれませんが、これが持つ大きな利点は、プロセスにメモリの負荷をかけないことです。これは、C# 5.0 が出荷されるまで保留されます。

于 2010-04-09T21:48:27.820 に答える