Отказ от ответственности : я работаю на Microsoft в команде Roslyn.
CodeDom является предшественником Roslyn, но имеет лишь незначительное отношение.По сути, CodeDom - это простой и (в некоторой степени) независимый от языка способ создания кода, который был добавлен в .NET 1.0 для поддержки дизайнеров (например, WinForms).Поскольку CodeDom был попыткой предоставить унифицированную модель, которая может генерировать код на C #, VB и других языках, ему не хватает высокой точности с любым из поддерживаемых языков (поэтому вы не можете создать оператор switch с CodeDom).CSharpCodeProvider.CompileAssemblyFromSource - это просто оболочка для выполнения csc.exe.
Рослин - совершенно другое животное.Это перезапись компиляторов C # и VB с нуля с использованием управляемого кода - C # в C # и VB в VB (версии csc.exe и vbc.exe, которые поставляются сегодня, написаны на собственном коде).Преимущество их построения в управляемом коде состоит в том, что пользователи могут ссылаться на настоящие компиляторы как библиотеки из приложений .NET (обертки не требуются).
При создании каждого компонента конвейера компилятора мы выставили открытые API наtop:
- Parser -> API синтаксического дерева
- Импорт таблицы символов / метаданных -> API символов
- Binder -> API связывания и анализа потока
- IL Emitter -> Emit API
Roslyn можно использовать как сложный генератор исходного кода C # и VB, но на этом сходство с CodeDom заканчивается.API-интерфейсы Roslyn Compiler можно использовать для анализа кода, выполнения семантического анализа, динамической компиляции и оценки кода и т. Д.
В дополнение к компиляторам группа Roslyn также перестраивает функции Visual Studio C # и VB IDE поверх общедоступных API компиляторов.Итак, API-интерфейсы компилятора достаточно богаты, чтобы создавать инструменты времени разработки Visual Studio, такие как IntelliSense и рефакторинг Extract Method.Кроме того, на уровнях выше компилятора Roslyn предлагает сервисы для высокоуровневого анализа или преобразования данных.Например, существуют службы для форматирования кода с использованием правил форматирования C # и VB или для поиска всех ссылок на определенный символ в решении.
Действительно, не существует только one specialПреимущество Roslyn перед CodeDom.В тех случаях, когда CodeDom удовлетворял очень специфическую потребность в генерации кода, Roslyn занимается всем пространством инструментальных средств для языка, предоставляя платформу, позволяющую создавать практически любой язык C # или VB, о котором вы только можете подумать.