반응형



CLR 은 VS 에서 컴파일된 중간 언어(IL = MSIL) 을 다시한번 재 컴파일해 각 플랫폼에서 실행 될 수 있는 네이티브 어셈블리로 변환하고 실행하는 역할을 합니다, 여러 플랫폼에서 실행 될 수 있게 하기위한 전략인 것이죠(닷넷 프레임 워크가 존재하는 이유중 하나라고 할 수 있습니다)

CLR 은 닷넷 프레임 워크 안에 존재하며 이것을 프로그래머가 수정하거나 가져다 쓸 수는 없습니다



.NET Framework 플랫폼 아키텍처

C# 프로그램은 CLR(공용 언어 런타임)이라고 하는 가상 실행 시스템과 통합된 클래스 라이브러리 집합을 포함하는 Windows의 통합 구성 요소인 .NET Framework에서 실행됩니다. CLR은 언어 및 라이브러리가 원활하게 함께 작동하는 실행 및 개발 환경을 만들기 위한 기준이 되는 국제 표준인 CLI(공용 언어 인프라)를 Microsoft에서 상업적으로 구현한 것입니다.

C#으로 작성된 소스 코드는 CLI 사양을 준수하는 IL(중간 언어)로 컴파일됩니다. IL 코드 및 리소스(예: 비트맵 및 문자열)는 일반적으로 확장명이 .exe 또는 .dll인 어셈블리라는 실행 파일로 디스크에 저장됩니다. 어셈블리는 어셈블리의 형식, 버전, 문화권 및 보안 요구 사항에 대한 정보를 제공하는 매니페스트를 포함합니다.

C# 프로그램이 실행될 경우 어셈블리가 CLR에 로드되어 매니페스트의 정보를 기준으로 다양한 작업을 수행할 수 있습니다. 그런 다음 보안 요구 사항을 충족되면 CLR은 JIT(Just-In-Time) 컴파일을 수행하여 IL 코드를 네이티브 기계어 명령으로 변환합니다. 

또한 CLR은 자동 가비지 수집, 예외 처리 및 리소스 관리와 관련된 다른 서비스도 제공합니다. 

CLR에서 실행되는 코드는 "관리 코드"라고도 합니다. 

즉, 특정 시스템을 대상으로 하는 네이티브 기계어로 컴파일되는 "비관리 코드"와는 반대됩니다. 다음 다이어그램은 C# 소스 코드 파일, .NET Framework 클래스 라이브러리, 어셈블리 및 CLR의 컴파일 타임 및 런타임 관계를 보여 줍니다.


CLR 로 넘어 가는 것은 MSIL 이며 CLR 안의 JIT 컴파일러를 통해 네이트브 기계어 코드로 변환 됩니다


언어 상호 운용성은 .NET Framework의 주요 기능입니다. 

C# 컴파일러에서 생성된 IL 코드는 CTS(공용 형식 사양=표준 타입 규칙)을 준수하므로 

C#에서 생성된 IL 코드는 .NET 버전의 Visual Basic, Visual C++ 또는 20개 이상의 다른 CTS 규격(닷넷 호환 언어가 지켜야할 타입의 표준 규칙) 언어에서 생성된 코드와 상호 작용할 수 있습니다. 

단일 어셈블리는 다른 .NET 언어로 작성된 여러 모듈을 포함할 수 있고 형식은 마치 같은 언어로 작성된 것처럼 서로를 참조할 수 있습니다.

.NET Framework에는 런타임 서비스 외에, 파일 입/출력부터 문자열 조작, XML 구문 분석, Windows Forms 컨트롤에 이르는 모든 항목에 대해 다양하고 유용한 기능을 제공하는 네임스페이스로 구성된 4,000개 이상의 광범위한 클래스 라이브러리도 포함됩니다. 일반적인 C# 응용 프로그램은 .NET Framework 클래스 라이브러리를 광범위하게 사용하여 일반적인 "배관" 작업을 처리합니다.


ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/getting-started/introduction-to-the-csharp-language-and-the-net-framework

반응형

+ Recent posts