Isenção de responsabilidade : Eu trabalho para a Microsoft na equipe Roslyn.
CodeDom é um precursor de Roslyn, mas é apenas marginalmente relacionado. Essencialmente, CodeDom é uma maneira simples e (um tanto) agnóstica de linguagem de gerar código que foi adicionado em .NET 1.0 para dar suporte a designers (como WinForms). Como o CodeDom foi uma tentativa de fornecer um modelo unificado que pode gerar código em C #, VB e outras linguagens, ele carece de alta fidelidade com qualquer uma das linguagens que oferece suporte (é por isso que você não pode criar uma instrução switch com CodeDom). CSharpCodeProvider.CompileAssemblyFromSource é simplesmente um invólucro em torno da execução de csc.exe.
Roslyn é um animal completamente diferente. É uma reescrita de ambos os compiladores C # e VB do zero usando código gerenciado - C # em C # e VB em VB (as versões de csc.exe e vbc.exe que vêm hoje são escritas em código nativo). A vantagem de construí-los em código gerenciado é que os usuários podem fazer referência aos compiladores reais como bibliotecas de aplicativos .NET (sem necessidade de wrappers).
Ao construir cada componente do pipeline do compilador, expusemos APIs públicas no topo:
- Parser -> API de árvore de sintaxe
- Tabela de símbolos / Importação de metadados -> API de símbolos
- Binder -> APIs de ligação e análise de fluxo
- IL Emitter -> Emit API
Roslyn pode ser usado como um sofisticado gerador de código-fonte C # e VB, mas é aí que termina a semelhança com o CodeDom. As APIs do Roslyn Compiler podem ser usadas para analisar código, realizar análise semântica, compilar e avaliar código dinamicamente, etc.
Além dos compiladores, a equipe do Roslyn também está reconstruindo os recursos do Visual Studio C # e VB IDE com base nas APIs públicas do compilador. Portanto, as APIs do compilador são ricas o suficiente para criar as ferramentas de tempo de design do Visual Studio, como o IntelliSense e a refatoração do Método de Extração. Além disso, em camadas acima do compilador, Roslyn oferece serviços para análise de nível superior ou transformação de dados. Por exemplo, existem serviços para formatar código usando as regras de formatação C # e VB ou encontrar todas as referências a um símbolo específico em uma solução.
Na verdade, não há apenas um benefício especial do Roslyn sobre o CodeDom. Onde CodeDom preencheu uma necessidade muito específica de geração de código, Roslyn está lidando com todo o espaço de ferramentas de linguagem, fornecendo uma estrutura que permite a você construir praticamente qualquer tipo de ferramenta de linguagem C # ou VB que você possa imaginar.