Haftungsausschluss : Ich arbeite für Microsoft im Roslyn-Team.
CodeDom ist ein Vorläufer von Roslyn, aber nur am Rande verwandt. Im Wesentlichen ist CodeDom eine einfache und (etwas) sprachunabhängige Methode zum Generieren von Code, der in .NET 1.0 hinzugefügt wurde, um Designer zu unterstützen (a la WinForms). Da CodeDom ein Versuch war, ein einheitliches Modell bereitzustellen, das Code in C #, VB und anderen Sprachen generieren kann, fehlt es an High-Fidelity mit einer der unterstützten Sprachen (aus diesem Grund können Sie mit CodeDom keine switch-Anweisung erstellen). CSharpCodeProvider.CompileAssemblyFromSource ist einfach ein Wrapper für die Ausführung von csc.exe.
Roslyn ist ein ganz anderes Tier. Es ist eine Neufassung der C # - und VB-Compiler von Grund auf unter Verwendung von verwaltetem Code - C # in C # und VB in VB (die Versionen von csc.exe und vbc.exe, die heute ausgeliefert werden, sind in nativem Code geschrieben). Der Vorteil der Erstellung in verwaltetem Code besteht darin, dass Benutzer die realen Compiler als Bibliotheken aus .NET-Anwendungen referenzieren können (keine Wrapper erforderlich).
Beim Erstellen jeder Komponente der Compiler-Pipeline haben wir oben öffentliche APIs verfügbar gemacht:
- Parser -> Syntax Tree API
- Import von Symboltabellen / Metadaten -> Symbol-API
- Binder -> Bindungs- und Flussanalyse-APIs
- IL Emitter -> API senden
Roslyn kann als hochentwickelter C # - und VB-Quellcodegenerator verwendet werden, aber hier endet die Ähnlichkeit mit CodeDom. Die Roslyn Compiler-APIs können verwendet werden, um Code zu analysieren, semantische Analysen durchzuführen, Code dynamisch zu kompilieren und auszuwerten usw.
Zusätzlich zu den Compilern erstellt das Roslyn-Team die Visual Studio C # - und VB IDE-Funktionen zusätzlich zu den öffentlichen Compiler-APIs neu. Die Compiler-APIs sind also umfangreich genug, um die Visual Studio-Entwurfszeit-Tools wie IntelliSense und das Refactoring der Extraktionsmethode zu erstellen. Auf Ebenen über dem Compiler bietet Roslyn außerdem Dienste für die Analyse oder Datentransformation auf höherer Ebene an. Beispielsweise gibt es Dienste zum Formatieren von Code unter Verwendung der C # - und VB-Formatierungsregeln oder zum Suchen aller Verweise auf ein bestimmtes Symbol in einer Lösung.
Wirklich, es gibt nicht nur einen besonderen Vorteil von Roslyn gegenüber CodeDom. Während CodeDom einen ganz bestimmten Bedarf an Codegenerierung erfüllte, befasst sich Roslyn mit dem gesamten Sprachwerkzeugbereich, indem es ein Framework bereitstellt, mit dem Sie nahezu jede Art von C # - oder VB-Sprachwerkzeug erstellen können, die Sie sich vorstellen können.