Descargo de responsabilidad : trabajo para Microsoft en el equipo de Roslyn.
CodeDom es un precursor de Roslyn, pero solo está relacionado marginalmente. Esencialmente, CodeDom es una forma simple y (algo) independiente del idioma de generar código que se agregó en .NET 1.0 para apoyar a los diseñadores (a la WinForms). Debido a que CodeDom fue un intento de proporcionar un modelo unificado que puede generar código en C #, VB y otros lenguajes, carece de alta fidelidad con cualquiera de los lenguajes que admite (es por eso que no puede crear una declaración de cambio con CodeDom). CSharpCodeProvider.CompileAssemblyFromSource es simplemente un envoltorio alrededor de la ejecución de csc.exe.
Roslyn es un animal completamente diferente. Es una reescritura de los compiladores de C # y VB desde cero utilizando código administrado: C # en C # y VB en VB (las versiones de csc.exe y vbc.exe que se envían hoy están escritas en código nativo). La ventaja de compilarlos en código administrado es que los usuarios pueden hacer referencia a los compiladores reales como bibliotecas de aplicaciones .NET (no se necesitan envoltorios).
Mientras compilamos cada componente de la canalización del compilador, hemos expuesto las API públicas en la parte superior:
- Analizador -> API de árbol de sintaxis
- Tabla de símbolos / Importación de metadatos -> API de símbolos
- Binder -> API de análisis de flujo y enlace
- Emisor de IL -> API de emisión
Roslyn se puede usar como un sofisticado generador de código fuente de C # y VB, pero ahí es donde termina la similitud con CodeDom. Las API del compilador de Roslyn se pueden utilizar para analizar código, realizar análisis semántico, compilar y evaluar código de forma dinámica, etc.
Además de los compiladores, el equipo de Roslyn también está reconstruyendo las características de Visual Studio C # y VB IDE además de las API públicas del compilador. Por lo tanto, las API del compilador son lo suficientemente ricas para crear las herramientas de tiempo de diseño de Visual Studio, como IntelliSense y la refactorización del método de extracción. Además, en capas por encima del compilador, Roslyn ofrece servicios para análisis de nivel superior o transformación de datos. Por ejemplo, existen servicios para formatear código usando las reglas de formato C # y VB, o encontrar todas las referencias a un símbolo en particular dentro de una solución.
Realmente, no hay solo un beneficio especial de Roslyn sobre CodeDom. Donde CodeDom cubrió una necesidad de generación de código muy específica, Roslyn está abordando todo el espacio de herramientas de lenguaje al proporcionar un marco que le permite construir casi cualquier tipo de herramienta de lenguaje C # o VB que pueda imaginar.