Disclaimer: Lavoro per Microsoft nel team di Roslyn.
CodeDom è un precursore di Roslyn, ma è solo marginalmente correlato. Essenzialmente, CodeDom è un modo agnostico semplice e (un po ') langage per generare codice aggiunto in .NET 1.0 per supportare i progettisti (a la WinForms). Poiché CodeDom è stato un tentativo di fornire un modello unificato in grado di generare codice in C#, VB e altri linguaggi, manca di alta fedeltà con qualsiasi lingua supportata (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 usando codice gestito - C# in C# e VB in VB (le versioni di csc.exe e vbc.exe che vengono spedite oggi sono scritte in codice nativo). Il vantaggio di crearli nel codice gestito è che gli utenti possono fare riferimento ai compilatori reali come librerie da applicazioni .NET (non sono necessari wrapper).
Mentre la costruzione di ogni componente della pipeline compilatore, abbiamo esposti API pubbliche in cima:
- Parser -> Syntax Tree API
- Tabella dei simboli/Metadata Import -> Simbolo API
- Binder -> Binding e di flusso di analisi API
- L'emettitore -> Emit API
Roslyn può essere utilizzato come un sofisticato C# a nd VB generatore di codice sorgente, ma è qui che finisce la somiglianza con CodeDom. Le API di Roslyn Compiler possono essere utilizzate per analizzare il codice, eseguire analisi semantiche, compilare e valutare il codice in modo dinamico, ecc.
Oltre ai compilatori, il team di Roslyn sta anche ricostruendo le caratteristiche di Visual Studio C# e VB IDE in alto delle API del compilatore pubblico. Pertanto, le API del compilatore sono abbastanza ricche per creare gli strumenti di progettazione di Visual Studio, come IntelliSense e il refactoring del metodo Extract. Inoltre, a livelli superiori al 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 la ricerca di tutti i riferimenti a un particolare simbolo all'interno di una soluzione.
Davvero, non c'è solo uno un vantaggio speciale di Roslyn su CodeDom. Laddove CodeDom ha riempito una necessità di generazione di codice molto specifica, Roslyn sta affrontando l'intero spazio degli strumenti linguistici fornendo un framework che consente di creare praticamente qualsiasi tipo di strumento di linguaggio C# o VB a cui si possa pensare.
fonte
2011-10-21 20:06:08
@Dustin: Roslyn sosterrà altre lingue? JavaScript (.NET), per esempio? – dbarros
@ Dustin: Questo è perfetto per creare un'esperienza IDE completa in grado di imporre la qualità del codice nella mia organizzazione, anche se non vedo una sostituzione completa della revisione manuale del codice, ma vedo un notevole aumento della qualità. Presto! –
Sarebbe bello se qualcuno avesse già creato uno strumento basato su Roslyn per convertire il codice che utilizza CodeDom in codice che utilizza la SyntaxFactory di Roslyn ... (In parte perché .Net Core ha Roslyn ma non CodeDom e sto usando una libreria di sviluppo CodeDom) – Emyr