Penafian : Saya bekerja untuk Microsoft di tim Roslyn.
CodeDom adalah pendahulu Roslyn, tetapi hanya sedikit terkait. Pada dasarnya, CodeDom adalah cara sederhana dan (agak) bahasa agnostik untuk menghasilkan kode yang ditambahkan di .NET 1.0 untuk mendukung desainer (a la WinForms). Karena CodeDom adalah upaya untuk menyediakan model terpadu yang dapat menghasilkan kode dalam C #, VB, dan bahasa lain, ia tidak memiliki ketepatan yang tinggi dengan salah satu bahasa yang didukungnya (itulah mengapa Anda tidak dapat membuat pernyataan switch dengan CodeDom). CSharpCodeProvider.CompileAssemblyFromSource hanyalah pembungkus untuk mengeksekusi csc.exe.
Roslyn adalah hewan yang sama sekali berbeda. Ini adalah penulisan ulang dari kedua kompiler C # dan VB dari bawah ke atas menggunakan kode yang dikelola - C # di C # dan VB di VB (versi csc.exe dan vbc.exe yang dikirimkan hari ini ditulis dalam kode asli). Keuntungan membangunnya dalam kode terkelola adalah pengguna dapat mereferensikan compiler sebenarnya sebagai pustaka dari aplikasi .NET (tidak diperlukan pembungkus).
Saat membangun setiap komponen pipeline compiler, kami telah mengekspos API publik di atas:
- Parser -> Syntax Tree API
- Tabel Simbol / Impor Metadata -> API Simbol
- Binder -> Binding and Flow Analysis API
- IL Emitter -> Emit API
Roslyn dapat digunakan sebagai generator kode sumber C # dan VB yang canggih, tetapi di sanalah kesamaan dengan CodeDom berakhir. Roslyn Compiler API dapat digunakan untuk mengurai kode, melakukan analisis semantik, menyusun dan mengevaluasi kode secara dinamis, dll.
Selain kompiler, tim Roslyn juga membangun kembali fitur Visual Studio C # dan VB IDE di atas API kompilator publik. Jadi, API kompilator cukup kaya untuk membangun alat waktu desain Visual Studio, seperti IntelliSense dan pemfaktoran ulang Metode Ekstrak. Selain itu, pada lapisan di atas kompiler, Roslyn menawarkan layanan untuk analisis tingkat tinggi atau transformasi data. Misalnya, ada layanan untuk memformat kode menggunakan aturan pemformatan C # dan VB, atau mencari semua referensi ke simbol tertentu dalam suatu solusi.
Sungguh, tidak hanya ada satu keuntungan khusus Roslyn dibandingkan CodeDom. Di mana CodeDom memenuhi kebutuhan pembuatan kode yang sangat spesifik, Roslyn menangani seluruh ruang perkakas bahasa dengan menyediakan kerangka kerja untuk memungkinkan Anda membangun hampir semua jenis alat bahasa C # atau VB yang dapat Anda pikirkan.