Отказ от ответственности : я работаю в 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 сверху:
- Парсер -> 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 или поиска всех ссылок на конкретный символ в решении.
На самом деле, у Roslyn нет одного особого преимущества перед CodeDom. Там, где CodeDom удовлетворяет очень конкретную потребность в генерации кода, Roslyn занимается всем пространством языковых инструментов, предоставляя платформу, позволяющую создавать практически любые языковые инструменты C # или VB, о которых вы можете подумать.