免責事項:私はRoslynチームのマイクロソフトで働いています。
CodeDomはRoslynの前身ですが、関連性はわずかです。基本的に、CodeDomは、デザイナーをサポートするために.NET 1.0で追加されたコード(WinFormsを含む)を生成する、単純で(ある程度)言語にとらわれない方法です。CodeDomは、C#、VB、およびその他の言語でコードを生成できる統合モデルを提供する試みだったため、サポートする言語の忠実度に欠けています(そのため、CodeDomでswitchステートメントを作成できません)。CSharpCodeProvider.CompileAssemblyFromSourceは、csc.exeの実行に関する単なるラッパーです。
ロズリンは完全に別の動物です。これは、マネージコードを使用して、C#コンパイラとVBコンパイラの両方を一から書き直したものです。マネージコードでそれらを構築する利点は、ユーザーが.NETアプリケーションからライブラリとして実際のコンパイラを参照できることです(ラッパーは不要)。
コンパイラパイプラインの各コンポーネントを構築する際に、公開APIを公開しました。
- パーサー->構文ツリーAPI
- シンボルテーブル/メタデータのインポート->シンボルAPI
- バインダー->バインディングおよびフロー分析API
- ILエミッタ-> APIを放出
Roslynは洗練されたC#およびVBソースコードジェネレーターとして使用できますが、CodeDomとの類似性はこれで終わりです。RoslynコンパイラAPIは、コードの解析、セマンティック分析の実行、コードの動的なコンパイルと評価などに使用できます。
コンパイラーに加えて、Roslynチームは、パブリックコンパイラーAPIの上にVisual Studio C#およびVB IDE機能も再構築しています。したがって、コンパイラAPIは、IntelliSenseやExtract MethodリファクタリングなどのVisual Studio設計時ツールを構築するのに十分なほど豊富です。また、Roslynはコンパイラーの上のレイヤーで、より高レベルの分析またはデータ変換のためのサービスを提供します。たとえば、C#およびVBのフォーマットルールを使用してコードをフォーマットしたり、ソリューション内の特定のシンボルへのすべての参照を検索したりするためのサービスがあります。
実際、CodeDomに対するRoslynの特別な利点は1つだけではありません。CodeDomが非常に特定のコード生成のニーズを満たす場合、Roslynは、考えられるあらゆる種類のC#またはVB言語ツールを構築できるフレームワークを提供することにより、言語ツールスペース全体に取り組んでいます。