Відмова : Я працюю в Microsoft над командою Roslyn.
CodeDom є попередником Росліна, але пов'язаний лише незначно. По суті, CodeDom - це простий і (дещо) агностічний спосіб генерування коду, який був доданий в .NET 1.0 для підтримки дизайнерів (a la WinForms). Оскільки CodeDom була спробою створення уніфікованої моделі, яка може генерувати код у C #, VB та інших мовах, йому не вистачає надійності з будь-яким з мов, які він підтримує (саме тому ви не можете створити оператор переключення за допомогою CodeDom). CSharpCodeProvider.CompileAssemblyFromSource - це просто обгортка навколо виконання csc.exe.
Рослін - зовсім інша тварина. Це перезапис компіляторів C # і VB з нуля, використовуючи керований код - C # в C # і VB в VB (версії csc.exe і vbc.exe, які постачаються сьогодні, написані в кодовому коді). Перевага побудови їх в керованому коді полягає в тому, що користувачі можуть посилатись на справжні компілятори як на бібліотеки з .NET-додатків (не потрібні обгортки).
Під час створення кожного компонента конвеєра компілятора ми відкрили відкриті API-вершини:
- Парсер -> API синтаксичного дерева
- Таблиця символів / Імпорт метаданих -> API Symbol
- Біндер -> API прив'язки та аналізу потоків
- IL Emitter -> Emit API
Рослін можна використовувати як складний генератор вихідних кодів C # і VB, але на цьому схожість з CodeDom закінчується. API Roslyn Compiler можна використовувати для розбору коду, виконання семантичного аналізу, динамічної компіляції та оцінки коду тощо.
Окрім компіляторів, команда Roslyn також відновлює функції Visual Studio C # та VB IDE поверх API-програм публічного компілятора. Таким чином, API компілятора досить багаті для створення інструментів часу проектування Visual Studio, таких як IntelliSense та методу рефакторингу методу Extract. Крім того, на шарах над компілятором Рослін пропонує послуги з вищого рівня аналізу або трансформації даних. Наприклад, є служби для форматування коду за допомогою правил форматування C # та VB або пошуку всіх посилань на певний символ у межах рішення.
Дійсно, не існує лише однієї особливої переваги Рослін над CodeDom. Там, де CodeDom заповнив дуже конкретну потребу в генеруванні коду, Рослін вирішує весь простір мовних інструментів, надаючи рамки, що дозволяють будувати майже будь-який тип мовного інструменту C # або VB, про який ви можете придумати.