면책 조항 : 저는 Roslyn 팀에서 Microsoft에서 일합니다.
CodeDom은 Roslyn의 선구자이지만 약간의 관련이 있습니다. 기본적으로 CodeDom은 디자이너를 지원하기 위해 .NET 1.0에 추가 된 코드를 생성하는 간단하고 (다소) 언어에 구애받지 않는 방법입니다 (WinForms). CodeDom은 C #, VB 및 기타 언어로 코드를 생성 할 수있는 통합 모델을 제공하려는 시도 였기 때문에 지원하는 모든 언어에 대한 충실도가 부족합니다 (이 때문에 CodeDom으로 switch 문을 만들 수 없습니다). CSharpCodeProvider.CompileAssemblyFromSource는 단순히 csc.exe 실행을 둘러싼 래퍼입니다.
Roslyn은 완전히 다른 동물입니다. C #의 C #과 VB의 VB (현재 제공되는 csc.exe 및 vbc.exe의 버전은 네이티브 코드로 작성 됨)를 사용하여 처음부터 C # 및 VB 컴파일러를 모두 다시 작성했습니다. 관리 코드에서 빌드 할 때의 이점은 사용자가 실제 컴파일러를 .NET 응용 프로그램의 라이브러리로 참조 할 수 있다는 것입니다 (래퍼가 필요하지 않음).
컴파일러 파이프 라인의 각 구성 요소를 빌드하는 동안 공개 API를 맨 위에 공개했습니다.
- 파서-> 구문 트리 API
- 기호 테이블 / 메타 데이터 가져 오기-> 기호 API
- 바인더-> 바인딩 및 흐름 분석 API
- IL 이미 터-> 방출 API
Roslyn은 정교한 C # 및 VB 소스 코드 생성기로 사용할 수 있지만 여기서 CodeDom과의 유사성이 끝납니다. Roslyn Compiler API는 코드 구문 분석, 의미 분석 수행, 코드를 동적으로 컴파일 및 평가하는 데 사용할 수 있습니다.
컴파일러 외에도 Roslyn 팀은 공용 컴파일러 API 위에 Visual Studio C # 및 VB IDE 기능 을 다시 빌드하고 있습니다. 따라서 컴파일러 API는 IntelliSense 및 Extract Method 리팩터링과 같은 Visual Studio 디자인 타임 도구를 빌드하기에 충분히 풍부합니다. 또한 컴파일러 위의 계층에서 Roslyn은 더 높은 수준의 분석 또는 데이터 변환을위한 서비스를 제공합니다. 예를 들어 C # 및 VB 형식 규칙을 사용하여 코드를 형식화하거나 솔루션 내에서 특정 기호에 대한 모든 참조를 찾는 서비스가 있습니다.
정말, 그냥 거기에없는 하나 된 CodeDom 이상 로슬린의 특별한 장점은. CodeDom이 매우 구체적인 코드 생성 요구를 충족시킨 경우 Roslyn은 생각할 수있는 거의 모든 종류의 C # 또는 VB 언어 도구를 빌드 할 수있는 프레임 워크를 제공하여 전체 언어 도구 공간을 처리하고 있습니다.