Zastrzeżenie : Pracuję dla firmy Microsoft w zespole Roslyn.
CodeDom jest prekursorem Roslyn, ale jest tylko nieznacznie powiązany. Zasadniczo CodeDom to prosty i (nieco) niezależny od języka sposób generowania kodu, który został dodany w .NET 1.0 do obsługi projektantów (a la WinForms). Ponieważ CodeDom było próbą dostarczenia ujednoliconego modelu, który może generować kod w C #, VB i innych językach, brakuje mu wysokiej wierności z żadnym z obsługiwanych języków (dlatego nie można utworzyć instrukcji przełącznika za pomocą CodeDom). CSharpCodeProvider.CompileAssemblyFromSource to po prostu otoka wokół wykonywania csc.exe.
Roslyn to zupełnie inne zwierzę. Jest to przepisanie zarówno kompilatorów C #, jak i VB od podstaw, przy użyciu kodu zarządzanego - C # w C # i VB w VB (wersje csc.exe i vbc.exe, które są obecnie dostarczane, są napisane w kodzie natywnym). Zaletą budowania ich w kodzie zarządzanym jest to, że użytkownicy mogą odwoływać się do rzeczywistych kompilatorów jako bibliotek z aplikacji .NET (nie są potrzebne otoki).
Podczas budowania każdego komponentu potoku kompilatora udostępniliśmy na wierzchu publiczne interfejsy API:
- Parser -> Syntax Tree API
- Import tabeli symboli / metadanych -> Symbol API
- Binder -> Binding and Flow Analysis APIs
- Emiter IL -> Emituj API
Roslyn może być używany jako wyrafinowany generator kodu źródłowego C # i VB, ale na tym kończy się podobieństwo do CodeDom. Interfejsy API Roslyn Compiler mogą służyć do analizowania kodu, wykonywania analiz semantycznych, dynamicznego kompilowania i oceniania kodu itp.
Oprócz kompilatorów zespół Roslyn przebudowuje również funkcje Visual Studio C # i VB IDE na podstawie publicznych interfejsów API kompilatora. Zatem interfejsy API kompilatora są wystarczająco bogate, aby tworzyć narzędzia czasu projektowania programu Visual Studio, takie jak IntelliSense i refaktoryzacja metody wyodrębniania. Ponadto na warstwach powyżej kompilatora Roslyn oferuje usługi analizy wyższego poziomu lub transformacji danych. Na przykład istnieją usługi do formatowania kodu przy użyciu reguł formatowania C # i VB lub znajdowania wszystkich odwołań do określonego symbolu w rozwiązaniu.
Naprawdę, nie ma jednej szczególnej korzyści z Roslyn w porównaniu z CodeDom. Tam, gdzie CodeDom spełniało bardzo specyficzną potrzebę generowania kodu, Roslyn zajmuje się całą przestrzenią narzędzi językowych, dostarczając strukturę umożliwiającą tworzenie dowolnego narzędzia języka C # lub VB, o którym możesz pomyśleć.