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