Tuyên bố từ chối trách nhiệm : Tôi làm việc cho Microsoft trong nhóm Roslyn.
CodeDom là tiền thân của Roslyn, nhưng chỉ có liên quan nhỏ. Về cơ bản, CodeDom là một cách đơn giản và (phần nào) về ngôn ngữ để tạo mã đã được thêm vào .NET 1.0 để hỗ trợ các nhà thiết kế (gọi là WinForms). Bởi vì CodeDom là một nỗ lực cung cấp một mô hình thống nhất có thể tạo mã bằng C #, VB và các ngôn ngữ khác, nó thiếu độ trung thực cao với bất kỳ ngôn ngữ nào mà nó hỗ trợ (đó là lý do tại sao bạn không thể tạo một câu lệnh switch với CodeDom). CSharpCodeProvider.CompileAssemblyFromSource chỉ đơn giản là một trình bao bọc xung quanh việc thực thi csc.exe.
Roslyn là một con vật hoàn toàn khác. Nó là bản viết lại của cả trình biên dịch C # và VB từ đầu sử dụng mã được quản lý - C # trong C # và VB trong VB (các phiên bản csc.exe và vbc.exe xuất xưởng ngày nay được viết bằng mã gốc). Ưu điểm của việc xây dựng chúng trong mã được quản lý là người dùng có thể tham chiếu các trình biên dịch thực như các thư viện từ các ứng dụng .NET (không cần trình bao bọc).
Trong khi xây dựng từng thành phần của quy trình biên dịch, chúng tôi đã đưa ra các API công khai ở trên cùng:
- Trình phân tích cú pháp -> API cây cú pháp
- Bảng ký hiệu / Nhập siêu dữ liệu -> API ký hiệu
- Binder -> API phân tích luồng và ràng buộc
- IL Emitter -> API phát
Roslyn có thể được sử dụng như một trình tạo mã nguồn C # và VB phức tạp, nhưng đó là nơi kết thúc sự tương đồng với CodeDom. Các API của trình biên dịch Roslyn có thể được sử dụng để phân tích cú pháp mã, thực hiện phân tích ngữ nghĩa, biên dịch và đánh giá mã động, v.v.
Ngoài các trình biên dịch, nhóm Roslyn cũng đang xây dựng lại các tính năng Visual Studio C # và VB IDE trên đầu các API trình biên dịch công khai. Vì vậy, các API trình biên dịch đủ phong phú để xây dựng các công cụ thời gian thiết kế Visual Studio, như IntelliSense và tái cấu trúc Phương pháp trích xuất. Ngoài ra, ở các lớp phía trên trình biên dịch, Roslyn cung cấp các dịch vụ để phân tích cấp cao hơn hoặc chuyển đổi dữ liệu. Ví dụ: có các dịch vụ để định dạng mã bằng cách sử dụng quy tắc định dạng C # và VB hoặc tìm tất cả các tham chiếu đến một ký hiệu cụ thể trong một giải pháp.
Thực sự, không chỉ có một lợi ích đặc biệt của Roslyn so với CodeDom. Khi CodeDom đáp ứng nhu cầu tạo mã rất cụ thể, Roslyn đang giải quyết toàn bộ không gian công cụ ngôn ngữ bằng cách cung cấp một khuôn khổ cho phép bạn xây dựng bất kỳ loại công cụ ngôn ngữ C # hoặc VB nào mà bạn có thể nghĩ đến.