Clause de non - responsabilité : je travaille pour Microsoft dans l'équipe Roslyn.
CodeDom est un précurseur de Roslyn, mais n'est que marginalement lié. Essentiellement, CodeDom est un moyen simple et (quelque peu) indépendant du langage de générer du code qui a été ajouté dans .NET 1.0 pour prendre en charge les concepteurs (à la WinForms). Étant donné que CodeDom était une tentative de fournir un modèle unifié capable de générer du code en C #, VB et d'autres langages, il manque de haute fidélité avec l'un des langages qu'il prend en charge (c'est pourquoi vous ne pouvez pas créer une instruction switch avec CodeDom). CSharpCodeProvider.CompileAssemblyFromSource est simplement un wrapper autour de l'exécution de csc.exe.
Roslyn est un animal complètement différent. Il s'agit d'une réécriture des compilateurs C # et VB à partir de zéro en utilisant du code managé - C # en C # et VB en VB (les versions de csc.exe et vbc.exe qui sont livrées aujourd'hui sont écrites en code natif). L'avantage de les créer en code managé est que les utilisateurs peuvent référencer les vrais compilateurs en tant que bibliothèques à partir d'applications .NET (aucun wrapper n'est nécessaire).
Lors de la création de chaque composant du pipeline du compilateur, nous avons exposé les API publiques en haut:
- Analyseur -> API de l'arborescence de syntaxe
- Importation de table de symboles / de métadonnées -> API de symbole
- Binder -> API de liaison et d'analyse de flux
- Émetteur IL -> Émettre l'API
Roslyn peut être utilisé comme un générateur de code source sophistiqué C # et VB, mais c'est là que s'arrête la similitude avec CodeDom. Les API Roslyn Compiler peuvent être utilisées pour analyser le code, effectuer une analyse sémantique, compiler et évaluer le code de manière dynamique, etc.
En plus des compilateurs, l'équipe Roslyn reconstruit également les fonctionnalités de Visual Studio C # et VB IDE en plus des API du compilateur public. Ainsi, les API du compilateur sont suffisamment riches pour créer les outils de conception de Visual Studio, tels que IntelliSense et le refactoring de la méthode d'extraction. De plus, au niveau des couches au-dessus du compilateur, Roslyn propose des services d'analyse ou de transformation de données de plus haut niveau. Par exemple, il existe des services de mise en forme du code à l'aide des règles de mise en forme C # et VB, ou de recherche de toutes les références à un symbole particulier dans une solution.
Vraiment, il n'y a pas qu'un seul avantage spécial de Roslyn par rapport à CodeDom. Là où CodeDom répondait à un besoin de génération de code très spécifique, Roslyn s'attaque à tout l'espace d'outillage de langage en fournissant un cadre pour vous permettre de créer à peu près n'importe quel type d'outil de langage C # ou VB auquel vous pouvez penser.