Descargo de responsabilidad: Trabajo para Microsoft en el equipo de Roslyn.
CodeDom es un precursor de Roslyn, pero está solo marginalmente relacionado. Esencialmente, CodeDom es una forma agnóstica simple y (algo) aburguesa de generar código que se agregó en .NET 1.0 para admitir diseñadores (al estilo de 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 idiomas que admite (es por eso que no puede crear una instrucción switch con CodeDom). CSharpCodeProvider.CompileAssemblyFromSource es simplemente un contenedor para la ejecución de csc.exe.
Roslyn es un animal completamente diferente. Es una reescritura de los compiladores 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 crearlos en código administrado es que los usuarios pueden hacer referencia a los compiladores reales como bibliotecas de aplicaciones .NET (no se necesitan envoltorios).
Aunque la construcción de cada componente de la tubería compilador, hemos expuesto API públicas en la parte superior:
- Analizador -> Sintaxis Árbol API
- Tabla de símbolos/metadatos Importación -> Símbolo API
- Carpeta -> Encuadernación y análisis APIs de flujo
- IL emisor -> Emit API
Roslyn se puede utilizar como un sofisticado C# una nd generador de código fuente VB, pero ahí es donde termina la similitud con CodeDom. Las API del compilador de Roslyn se pueden usar para analizar código, realizar análisis semánticos, compilar y evaluar código dinámicamente, etc.
Además de los compiladores, el equipo de Roslyn también está reconstruyendo el Visual Studio C# y VB IDE características en la parte superior de las API del compilador público. Por lo tanto, las API del compilador son lo suficientemente ricas como para construir las herramientas de Visual Studio en tiempo de diseño, como IntelliSense y la refactorización de Extract Method. Además, en las capas superiores al compilador, Roslyn ofrece servicios para análisis de alto nivel o transformación de datos. Por ejemplo, hay servicios para formatear código usando las reglas de formato C# y VB, o encontrar todas las referencias a un símbolo particular dentro de una solución.
Realmente, no hay solo uno beneficio especial de Roslyn sobre CodeDom. Donde CodeDom llenó una necesidad de generación de código muy específica, Roslyn está abordando todo el espacio de herramientas de idiomas al proporcionar un marco que le permite construir casi cualquier tipo de herramienta de lenguaje C# o VB que se le ocurra.
@Dustin: ¿Roslyn estará apoyando otros idiomas? JavaScript (.NET), por ejemplo? – dbarros
@Dustin: Esto es perfecto para crear una experiencia IDE completa que pueda aplicar la calidad del código en mi organización, aunque no veo un reemplazo completo de la revisión manual del código, pero veo un aumento considerable en la calidad. ¡Pronto! –
Sería genial si alguien hubiera creado una herramienta basada en Roslyn para convertir código que usa CodeDom en código que utiliza SyntaxFactory de Roslyn ... (En parte porque .Net Core tiene Roslyn pero no CodeDom y estoy usando una lib basada en CodeDom) – Emyr