Dichiarazione di non responsabilità : lavoro per Microsoft nel team di Roslyn.
CodeDom è un precursore di Roslyn, ma è correlato solo marginalmente. Essenzialmente, CodeDom è un modo semplice e (in qualche modo) indipendente dal linguaggio per generare codice che è stato aggiunto in .NET 1.0 per supportare i progettisti (come WinForms). Poiché CodeDom era un tentativo di fornire un modello unificato in grado di generare codice in C #, VB e altri linguaggi, manca di alta fedeltà con nessuno dei linguaggi supportati (ecco perché non è possibile creare un'istruzione switch con CodeDom). CSharpCodeProvider.CompileAssemblyFromSource è semplicemente un wrapper per l'esecuzione di csc.exe.
Roslyn è un animale completamente diverso. È una riscrittura dei compilatori C # e VB da zero utilizzando codice gestito - C # in C # e VB in VB (le versioni di csc.exe e vbc.exe fornite oggi sono scritte in codice nativo). Il vantaggio di crearli in codice gestito è che gli utenti possono fare riferimento ai compilatori reali come librerie da applicazioni .NET (non sono necessari wrapper).
Durante la creazione di ogni componente della pipeline del compilatore, abbiamo esposto le API pubbliche in primo piano:
- Parser -> API dell'albero della sintassi
- Importazione tabella dei simboli / metadati -> API dei simboli
- Binder -> API di binding e analisi del flusso
- IL Emitter -> Emit API
Roslyn può essere utilizzato come sofisticato generatore di codice sorgente C # e VB, ma è qui che finisce la somiglianza con CodeDom. Le API del compilatore Roslyn possono essere utilizzate per analizzare il codice, eseguire analisi semantiche, compilare e valutare il codice dinamicamente, ecc.
Oltre ai compilatori, il team di Roslyn sta anche ricostruendo le funzionalità IDE di Visual Studio C # e VB oltre alle API del compilatore pubblico. Pertanto, le API del compilatore sono sufficientemente ricche per creare gli strumenti della fase di progettazione di Visual Studio, come IntelliSense e il refactoring del metodo di estrazione. Inoltre, ai livelli sopra il compilatore, Roslyn offre servizi per l'analisi di livello superiore o la trasformazione dei dati. Ad esempio, esistono servizi per la formattazione del codice utilizzando le regole di formattazione C # e VB o per trovare tutti i riferimenti a un particolare simbolo all'interno di una soluzione.
In realtà, non c'è solo un vantaggio speciale di Roslyn su CodeDom. Laddove CodeDom ha soddisfatto un'esigenza di generazione di codice molto specifica, Roslyn sta affrontando l'intero spazio degli strumenti del linguaggio fornendo un framework che ti consente di creare praticamente qualsiasi tipo di strumento di linguaggio C # o VB a cui puoi pensare.