C#のメモリ内コンパイラ全体が呼び出されているSOのこの質問を検討します。語彙素と構文の分析のみが必要な場合:テキストを語彙素のストリームとして解析し、それらをチェックして終了します。
System.CodeDom.Compilerの現在のバージョンで可能ですか、そうでない場合は可能ですか?
C#のメモリ内コンパイラ全体が呼び出されているSOのこの質問を検討します。語彙素と構文の分析のみが必要な場合:テキストを語彙素のストリームとして解析し、それらをチェックして終了します。
System.CodeDom.Compilerの現在のバージョンで可能ですか、そうでない場合は可能ですか?
Monoを使用できる場合は、使用できる可能性のあるC#パーサー/レクサーがあると思います。
調べるためのリンクは次のとおりです。MS C#チームが何を計画しているのかについては、ある時点でC#コンパイラを「サービス」にするという話がありますが、それが何を意味するのか、いつそれが起こるのかは不明です。
コードがインメモリ (CompilerParameters.GenerateInMemory) でコンパイルされているように見えるかもしれませんが、実際にはそうではありません。コード (csc.exe) のコンパイルには、Visual Studio で使用されているものと同じコンパイラが使用されます。これは CreateProcess によって開始され (Process.Start によく似ています)、プロセス外で実行されて、一時フォルダー内のディスク上のアセンブリにコードをコンパイルします。GenerateInMemory オプションは、Assembly.LoadFrom() を呼び出してアセンブリを読み込みます。
GenerateInMemory を false に設定し、完了後に OutputAssembly を削除するだけで、構文チェックと同等の結果が得られます。
これは少し後ろ向きに聞こえるかもしれませんが、これが持つ大きな利点は、プロセスにメモリの負荷をかけないことです。これは、C# 5.0 が出荷されるまで保留されます。