|
# 작성중...
|
|
|
|
|
|
|
|
### 닷넷 프레임워크
|
|
|
|
|
|
|
|
닷넷 프레임워크는 2002년에 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 프로세스 가상 머신에 속한다. 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과는 달리, 닷넷 프레임워크를 기반으로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다.
|
|
닷넷 프레임워크는 2002년에 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 프로세스 가상 머신에 속한다. 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과는 달리, 닷넷 프레임워크를 기반으로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다.
|
|
|
|
|
|
닷넷 프레임워크를 설치하면 가상 머신 역할을 하는 CLR(Common Language Runtime) 구성요소가 실행될 수 있는 환경이 윈도우 운영체제에 마련된다.
|
|
닷넷 프레임워크를 설치하면 가상 머신 역할을 하는 CLR(Common Language Runtime) 구성요소가 실행될 수 있는 환경이 윈도우 운영체제에 마련된다.
|
|
|
|
|
|
가상머신 CLR에서 실행될 수 있는 언어를 CIL(Common Intermediate Language)라고 하며 CIL로 변역되는 언어를 닷넷 호환 언어(.NET-Compliant Language)라고 한다. 마이크로소프트에 의해 공식적으로 제공되는 닷넷 호환 언어는 C#, Visual Basic, .NET, F#, C++/CLI가 있다.
|
|
가상머신 CLR에서 실행될 수 있는 언어를 CIL(Common Intermediate Language) 또는 IL 라고 하며 IL로 변역되는 언어를 닷넷 호환 언어(.NET-Compliant Language)라고 한다. 마이크로소프트에 의해 공식적으로 제공되는 닷넷 호환 언어는 C#, Visual Basic, .NET, F#, C++/CLI가 있다.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
위의 그림을 보면 C#컴파일러는 CLR를 로드하는 코드와 C#소스코드를 기계어가 아닌 CIL 코드로 EXE/DLL 파일 내부에 생성한다. 따라서 사용자가 C#으로 개발된 애플리케이션을 실행하면 내부적으로 CLR이 먼저 로드된다. 이어서 CLR은 EXE 파일 내에 있는 IL코드를 로드해서 실행시킨다.
|
|
위의 그림을 보면 C#컴파일러는 CLR를 로드하는 코드와 C#소스코드를 기계어가 아닌 IL코드로 EXE/DLL파일 내부에 생성한다. 따라서 사용자가 C#으로 개발된 애플리케이션을 실행하면 내부적으로 CLR이 먼저 로드된다. 이어서 CLR은 EXE 파일 내에 있는 IL코드를 로드해서 실행시킨다.
|
|
_ _ _
|
|
|
|
|
|
#### CLR
|
|
|
|
CLR는 두 가지 큰 기능이 있는데, 하나는 CIL를 JIT컴파일러를 이용해 기계어로 변환하는 것이고, 다른 하나는 GC(Garbage Collector)를 제공해 동적 메모리 할당 및 회수를 지원하는 것이다. CLR의 JIT(Just In Time compilation)은 CIL파일이 정상인지 판단하고 Runtime 시 사용하는 native코드를 IL코드로 변환 후 호출한다. JIT은 지속적으로 보안, 메모리 관리, 쓰레드와 같은 부분을 Runtime 시 지속적으로 관리한다.
|
|
|
|
|
|
#### CLI
|
|
프로그램 실행 중 CLR는 다음과 같은 기능을 한다.
|
|
|
|
**1. Memory management**
|
|
|
|
**2. Exception handling**
|
|
|
|
**3. Code access security**
|
|
|
|
**4. Thread execution**
|
|
|
|
**5. Debugging**
|
|
|
|
**6. Verification & Compilation**
|
|
|
|
**7. Garbage Collector**
|
|
|
|
|
|
#### 공통 중간 언어(CIL: Common Intermediate Language)
|
|
#### 공통 중간 언어(CIL: Common Intermediate Language)
|
|
자바의 VM에서는 중간 언어를 특별히 바이트 코드(Byte Code)라고 한다. 이와 마찬가지로 닷넷의 CLR에서는 이를 CIL이라고 하며, 보통은 줄여서 IL 코드, 또는 MSIL 코드라고 한다. 이는 CPU에 독립적인 결과물로서, 모든 닷넷 호환언어는 소스코드를 IL 코드로 컴파일하고, CLR이 실행될 때 IL 코드를 CPU의 기계어로 최종 번역한다. IL 코드에는 자체적인 프로그래밍 문법이 있으며 ILASM.EXE라는 전용 컴파일러도 있다. IL코드는 가상 머신에서 실행된다는 의미에서 일종의 기계어와 유사하다.
|
|
자바의 VM에서는 중간 언어를 특별히 바이트 코드(Byte Code)라고 한다. 이와 마찬가지로 닷넷의 CLR에서는 이를 CIL이라고 하며 보통은 줄여서 IL코드 또는 MSIL코드라고 한다. 이는 CPU에 독립적인 결과물로서 모든 닷넷 호환언어는 소스코드를 IL 코드로 컴파일하고 CLR이 실행될 때 IL코드를 CPU의 기계어로 최종 번역한다. IL코드에는 자체적인 프로그래밍 문법이 있으며 ILASM.EXE라는 전용 컴파일러도 있다. IL코드는 가상 머신에서 실행된다는 의미에서 일종의 기계어와 유사하다.
|
|
|
|
|
|
#### 공통 타입 시스템(CTS: Common Language Specification)
|
|
#### 공통 타입 시스템(CTS: Common Language Specification)
|
|
닷넷 호환 언어가 지켜야 할 타입(Type)의 표준 규격을 정의한 것이 공용 타입 시스템이다. 예를 들어 CTS 에서는 클래스의 상속을 하나만 받을 수 있도록 정의하고 있다. 따라서 직접 닷넷 호환 언어를 만든다면 클래스의 다중 상속을 지원하도록 만들 수는 없다. 즉, 닷넷 호환 언어는 CTS의 한계를 넘어서 구현할 수 없다.
|
|
닷넷 호환 언어가 지켜야 할 타입(Type)의 표준 규격을 정의한 것이 공용 타입 시스템이다. 예를 들어 CTS에서는 클래스의 상속을 하나만 받을 수 있도록 정의하고 있다. 따라서 직접 닷넷 호환 언어를 만든다면 클래스의 다중 상속을 지원하도록 만들 수는 없다. 즉, 닷넷 호환 언어는 CTS의 한계를 넘어서 구현할 수 없다.
|
|
|
|
|
|
#### 공용 언어 사양(CLS: Common Language Specification)
|
|
#### 공용 언어 사양(CLS: Common Language Specification)
|
|
닷넷 호환 언어가 지켜야할 최소한의 언어 사양을 정의한 것이다. CTS 전체를 구현할 필요는 없지만 CLS에 명시된 사양만큼은 완벽하게 구현해야 한다. 닷넷 호환 언어끼리는 서로 사용할 수 있고 상속을 받을 수 있다. 이 경우에는 CLS를 만족 시키도록 작성해야 한다는 것이다.
|
|
닷넷 호환 언어가 지켜야할 최소한의 언어 사양을 정의한 것이다. CTS 전체를 구현할 필요는 없지만 CLS에 명시된 사양만큼은 완벽하게 구현해야 한다. 닷넷 호환 언어끼리는 서로 사용할 수 있고 상속을 받을 수 있다. 이 경우에는 CLS를 만족 시키도록 작성해야 한다는 것이다.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
#### 공용 언어 기반구조(Common Language Infrastructure)
|
|
|
|
|
|
_ _ _
|
|
CLI는 CTS 명세를 포함하며 중간 언어에 대한 코드 정의, Metadata와 그것을 포함하는 이진파일의 구조까지 표준 사양으로 기술하고 있다. CLI 규격을 마이크로소프트에서 구현한 실체가 바로 CLR이다. 또한 마이크로소프트에서는 CLI를 외부에서도 쉽게 구현할 수 있게 최소한의 코드로 CLI를 구현한 SSCLI(Shared Source CLI)를 함께 공개했다. 그 외에 모노(Mono) 프레임워크라는 또 다른 CLI 구현체가 오픈소스로 꾸준히 개발되고 있으며 이 프레임워크는 리눅스, iOS, 안드로이드까지 지원하고 있다.
|
|
|
|
|
|
#### CLR
|
|
|
|
#### JIT 컴파일러
|
|
|
|
|
|
|
|
_ _ _
|
|
CLI는 4가지 구성요소로 나뉜다.
|
|
|
|
|
|
|
|
**1. Common Type System (CTS)**
|
|
|
|
**2. Common Language Specification (CLS)**
|
|
|
|
**3. Metadata :** Metadata는 어셈블리에 정의된 모든 클래스와 클래스 멤버에 대한 정보를 제공한다.
|
|
|
|
**4. Virtual Execution System (VES) :** VES는 Metadata를 사용하는 CLI와 호횐되는 프로그램을 구동시킨다. CLI는 virtual operation system에 대한 명세서이며 구현된 virtual operation system이 CLR이다.
|
|
|
|
|
|
#### 어셈블리
|
|
#### 어셈블리
|
|
** 어셈블리 :** c#으로 프로그램을 하는 경우 대개 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이러한 실행파일을 어셈블리(Assembly)라고 한다. 닷넷에서 특별한 언급이 없다면 어셈블리는 실행 파일(EXE, DLL)을 의미한다.
|
|
** 어셈블리 :** c#으로 프로그램을 하는 경우 대개 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이러한 실행파일을 어셈블리(Assembly)라고 한다. 닷넷에서 특별한 언급이 없다면 어셈블리는 실행 파일(EXE, DLL)을 의미한다.
|
|
|
|
|
|
** 매니페스트 : ** JIT 컴파일러가 어셈블리의 IL 코드를 기계어 코드로 컴파일하는 과정에서 어떤 Class 타입이 현재 어셈블리내에 정의되어 있는지 정의되어 있지 않다면 다른 어셈블리의 이름 정보(사용자 친화적인 어셈블리명, 버전번호, 컬쳐, 공개키)를 얻는다. 이 참조 어셈블리에 이름 정보가 곳이 메니페스트(Menifest)이다.
|
|
** 매니페스트 : ** JIT 컴파일러가 어셈블리의 IL코드를 기계어 코드로 컴파일하는 과정에서 어떤 Class타입이 현재 어셈블리내에 정의되어 있는지 정의되어 있지 않다면 다른 어셈블리의 정보를 얻는다. 이 참조 어셈블리의 정보가 있는 곳이 메니페스트(Menifest)이다. 메니페스트를 포함하고 있지 않은 모듈은 보통 확장자가 netmodule이다. 매니페스트를 포함하는 경우에는 확장자가 DLL(또는 EXE)이다.
|
|
|
|
|
|
** Type Metadata :** 어셈블리에서 사용하는 모든 형식에 대한 구체적인 정보를 가지고 있다. 리플렉션이 가능하게 한다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
** Type Metadata :** 데이터를 위한 데이터를 메타데이터(Metadata)라고 한다. 프로그래밍 언어에서는 개발자가 구현한 코드가 데이터에 해당하고, 해당 코드의 성격을 설명해 주는 별도의 데이터를 메타데이터라고한다. CLR에서 동작하는 실행파일은 완전하게 자기 서술적인(self-descriptive) 메타데이터를 제공하며, 외부에서는 이러한 정보를 리플렉션(Reflection)이라고하는 기술을 통해 사용 할 수 있다. 다른 사람이 만든 EXE/DLL파일에서 어떤 클래스와 메서드가 제공되는지 확인하고 싶다면 이 메타데이터를 통해 알 수 있다. 현재 어샘블리와 호출되는 어셈블리의 모든 Class와 Class멤버가 정의되어 있다. method에 대한 메타데이터는 return type과 method의 파라메타 등에 대한 정보를 모두 가지고 있다.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
#### 어셈블리, 모듈, 매니페스트
|
|
#### Managed code
|
|
|
|
Managed code는 Visual Studio 2003버전이 발표되면서 MS에서 만들어낸 개념이다. 일반적으로 Managed code란 VB .NET 또는 C#컴파일러가 생성한 코드이다. 컴파일러를 통해서 컴파일 된 Managed Code는 컴퓨터에서 바로 실행할 수 없는 IL이다. 이 IL은 CLR기반에서 실행이 된다. VB .NET과 C#은 Managed Code만 생성이 가능하다. 하지만 VC++은 Managed Code와 Unmanaged Code를 둘다 만들 수 있다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
메니페스트를 포함하고 있지 않은 모듈은 보통 확장자가 netmodule이다. 매니페스트를 포함하는 경우에는 확장자가 DLL(또는 EXE)이다.
|
|
|
|
|
|
|
|
|
|
|
|
IL은 어셈블리라 불리는 파일에 저장이되는데 어셈블리에는 메타데이터와 같이 저장이 된다. 메타데이터에는 클래스, 메소드, 속성
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Mamanged
|
|
|
|
#### Unmanaged
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
|
|
**1번 주제는 닷넷프레임워크 및 개발 환경에 대한 이해입니다. .Net Framework, CLR, CTS, 어셈블리, Managed, Unmanaged 등에 대한 정리를 해주시구요. C#버전, .Net Framework 버전, Visual Studio 버전 간의 상관관계도 정리해주시길 바랍니다.**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C#으로 개발된 소스코드는
|
|
|
|
|
|
|
|
닷넷 프레임워크를 기반으로 만들어진 응용프로그램은
|
|
|
|
|
|
|
|
|
|
|
|
C# -> IL(Intermediate Language)
|
|
|
|
C#과 같이 IL로 번역되는 언어를 닷넷 호환 언어(.NET-Compliant Language)라고 한다.
|
|
|
|
|
|
|
|
닷넷 호환 언어 : C#, Visual Basic, .NET, F#, C++/CLI가 있다.
|
|
|
|
|
|
|
|
닷넷 프레임워크는 **"닷넷 프레임워크 = CLR + 부가 구성 요소"** 라고 간단히 정의할 수 있다. CLR(Common Language Runtime)란 Virtual Machine으로서 두 가지 큰 기능을 수행한다. 하나는 IL
|
|
|
|
_ _ _
|
|
|
|
|
|
|
|
#### CLR
|
|
|
|
|
|
|
|
CLR는 실행환경이다. Operating Systems 과 .NET Language 로 작성된 CLS를 따르는 applications 사이에서 동작한다.
|
|
|
|
CLR는 native code를 managed code로 변환시키는 것과 프로그램을 실행시키는 것이 주요기능입니다. managed code는 managed code가 사용될 때만 컴파일된다.
|
|
|
|
CLR의 Just In Time compilation 은 어플리케이션 실행도중 요구사항에 따라 native code를 Intermediate Language (MSIL)로 변환한다.
|
|
|
|
|
|
|
|
프로그램 실행 중 CLR는 메모리, 쓰레드를 실행, Garbage Collection, Exception Handling, CTS, Code safty verifications, and other system services 를 관리한다.
|
|
|
|
|
|
|
|
|
|
|
|
CLR는 마이크로 소프트 이니셔티브에서 제공하는 가상머신의 구성요소입니다. .NET Framework 언어로 개발된 프로그램 코드는 cCIL로 알려진 공통 중간 언어 ()
|
|
|
|
1. IL 파일이 정신인지 판단하고 Runtime에 사용하는 메소드를 호출한다. 이를 Just In Time이라 부른다. Just In Time은 지속적으로 보안, 메모리 관리, 쓰레드와 같은 부분은 Runtime 시에 지속적으로 관리한다.
|
|
|
|
|
|
|
|
2.
|
|
|
|
- - -
|
|
|
|
|
|
|
|
닷넷 프레임워크는 방대한 class library(Framework Class Library) 와 몇몇 language 들 간의 language interoperability 를 제공한다. .NET Framework 로 생성된 언어는 Common Language Runtime(CLR)라는 application virtual machine에서 실행된다.
|
|
|
|
|
|
|
|
|
|
|
|
https://en.wikipedia.org/wiki/.NET_Framework
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### unmanaged code
|
|
|
|
unmanaged code는 Visual Studio .Net 2002가 릴리즈 되기 이전의 코드를 말하는데, 이는 VB 6.0 등에서 사용된 코드이다. unmanaged code는 코드라 바로 Machine Code로 컴파일되고, 컴파일한 Machine 과 동일한 칩을 사용하는 환경에서만 실행이 가능하다. unmanaged code는 보안, 메모리 관리 등에 대해서 컨트롤 하지 않는다.
|
|
|
|
|
|
|
|

|
|
|
|
|
|
네트워크 작업, 인터페이스 등 많은 작업을 캡슐화 하였고, CLR이라는 Virtual Machine 위에서 동작한다.
|
|
#### .NET Framework
|
|
닷넷 프레임워크 = CLR + 부가 구성 요소
|
|
CLR의 기능만으로는 응용 프로그램을 작성하는 개발자를 만족시킬 수 없다. 마이크로소프트는 CLR말고도 여러 가지 구성 요소를 함께 만들어 이를 하나의 패키지로 묶어 배포하는데, 이것이 바로 우리가 자주 들었던 "닷넷 프레임워크"로서, 간단히 줄여 "닷넷"이라고 표현한다. 닷넷 프레임워크는 **"닷넷 프레임워크 = CLR + 부가 구성 요소"** 라고 간단히 정의할 수 있다.
|
|
|
|
|
|
부가 구성 요소 | 설명
|
|
부가 구성 요소 | 설명
|
|
-------------- | -------------
|
|
-------------- | -------------
|
... | @@ -126,172 +69,21 @@ BCL(Base Class Library) | 마이크로소프트는 특정 기능을 수행하는 |
... | @@ -126,172 +69,21 @@ BCL(Base Class Library) | 마이크로소프트는 특정 기능을 수행하는 |
|
부가적인 실행파일 | 마이크로소프트는 닷넷 프레임워크에 기본적으로 C#, VB.NET 컴파일러를 제공하고 있으며, 그 외에도 각종 유틸리티 성격의 실행 파일을 포함시켜뒀다.
|
|
부가적인 실행파일 | 마이크로소프트는 닷넷 프레임워크에 기본적으로 C#, VB.NET 컴파일러를 제공하고 있으며, 그 외에도 각종 유틸리티 성격의 실행 파일을 포함시켜뒀다.
|
|
GAC(Global Assembly Cache) | GAC는 컴퓨터에서 실행되는 닷넷 응용 프로그램이 어셈블리 파일을 공통적으로 찾을 수 있는 전역 저장소다. 일반적으로는 C:\Windows\assembly 폴더에 위치하고 각종 DLL 파일을 담고 있다.
|
|
GAC(Global Assembly Cache) | GAC는 컴퓨터에서 실행되는 닷넷 응용 프로그램이 어셈블리 파일을 공통적으로 찾을 수 있는 전역 저장소다. 일반적으로는 C:\Windows\assembly 폴더에 위치하고 각종 DLL 파일을 담고 있다.
|
|
|
|
|
|
|
|
#### C#버전, .Net Framework 버전, Visual Studio 버전 간의 상관 관계
|
|
|
|
|
|
### CLI (Common Language Infrastruct)
|
|

|
|
|
|
2015년 7월 20일 비주얼 스튜디오 2015와 함께 닷넷 4.6, C# 6.0이 발표됐다.
|
|
|
|
|
|
## 목표
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 닷넷 프레임워크
|
|
|
|
2002년에 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 **프로세스 가상 머신**에 속한다. 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과는 달리, 닷넷 프레임워크로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다.
|
|
|
|
|
|
|
|
윈도우10에서는 닷넷 프레임워크 4.6이 기본적으로 탑재
|
|
|
|
|
|
|
|
닷넷 프레임워크를 설치하면 가상 머신 역할을 하는 CLR(Common Language Runtime) 구성요소가 실행될 수 있는환경이 윈도우 운영체제에 마련된다.
|
|
|
|
|
|
|
|
CLR 구성요소?
|
|
|
|
********
|
|
|
|
CLR은 프로세스(EXE)가 실행되면 메모리에 함께 적재돼 실행된다. 닷넷 프로그램은 외형상 EXE/DLL로 기존의 프로그램과 동일한 구조다. 하지만 내부적으로는 CLR 구성요소가 로드돼 실행되고, 그 CLR이 EXE/DLL에 함께 저장돼 있는 닷넷 코드를 실행한다.
|
|
|
|
|
|
|
|
C# 컴파일러는 소스코드를 기계어가 아닌 IL(Intermediate Language)이라고 하는 중간 언어로 EXE/DLL 파일 내부에 생성한다. 또한 프로그램이 시작하자마자 CLR을 로드하는 코드를 자동으로 자동으로 EXE 파일 내부에 추가한다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### CIL(CIL : Common Intermediate Language)
|
|
|
|
|
|
|
|
자바의 VM에서는 중간 언어를 바이트 코드(Byte code)라고 한다.
|
|
|
|
닷넷은 CLR에서는 중간 언어를 CIL라고하며 줄여서 IL 또는 MSIL 코드라고 한다. 이는 **CPU에 독립적인 결과물(CPU에 의존적인 결과물은 컴파일 하고난 소스코드를 컴파일하면 CPU의 기계어로 컴파일되나.)**로서, 모든 닷넷 호환 언어는 소스코드를 IL 코드로 컴파일하고, CLR이 실행될 때 IL 코드를 CPU의 기계어로 최종 번역한다.
|
|
|
|
|
|
|
|
|
|
#### 참고자료, 이미지 출처
|
|
C# 컴파일러로 빌드하면 중간 언어인 IL 코드로 변환된다. IL 코드는 가상머신에서 실행된다는 의미로 일종의 기계어와 유사하다. 기계어와 일대일 대응되는 어셈블리 언어가 있는 것 처럼 IL 코드도 일대일 대응되는 IL 언어가 따로 있다.
|
|
https://en.wikipedia.org/wiki/.NET_Framework
|
|
|
|
|
|
닷넷 호환 언어는 두 가지 방법으로 구현되고 있다.
|
|
|
|
**첫 번째는 C#언어처럼 COBOL 소스코드에서 곧바로 중간 언어를 생성하도록 만들 수 있다.**
|
|
|
|
두 번째는 COBOL 소스코드를 일단 IL 소스코드로 변환한 다음 그것을 컴파일할 수 있는 ilasm.exe의 도움을 받아 실행파일을 만드는 유형도 있다.
|
|
|
|
|
|
|
|
#### 공용 타입 시스템 (Common Type System)
|
|
|
|
|
|
|
|
닷넷 호환 언어가 지켜야 할 타입(Type)의 표준 규격을 정의한 것이 공용 타입 시스템(CTS)이다.
|
|
|
|
|
|
|
|
#### 공용 언어 사양(Commom Language Specification)
|
|
|
|
|
|
|
|
닷넷 호환 언어가 지켜야 할 최소한의 언어 사양을 정의한 것이 공용 언어 사양(CLS)이다. 닷넷 호환 언어는 CTS 전체를 구현 할 필요는 없지만 CLI에 명시된 사양만큼은 완벽하게 구현해야 한다.
|
|
|
|
|
|
|
|
|
|
|
|
#### 메타데이터
|
|
|
|
|
|
|
|
데이터를 위한 데이터를 메타데이터(Metadata)라고 한다. 프로그래밍 언어에서는 개발자가 구현한 코드가 데이터에 해당하고, 해당 코드의 성격을 설명해 주는 별도의 데이터를 메타데이터라고한다.
|
|
|
|
CLR에서 동작하는 실행파일은 완전하게 자기 서술적인(self-descriptive) 메타데이터를 제공하며, 외부에서는 이러한 정보를 리플렉션(Reflection)이라고하는 기술을 통해 사용 할 수 있다. 다른 사람이 만든 EXE/DLL 파일에서 어떤 클래스와 메서드가 제공되는지 확인하고 싶다면 이 메타데이터를 통해 알 수 있다.
|
|
|
|
|
|
|
|
|
|
|
|
#### 공용 언어 기반구조(Common Language Infrastructure)
|
|
|
|
|
|
|
|
CLI는 CTS 명세를 포함하며, 중간 언어에 대한 코드 정의,메터데이터와그것을포함하는 이진파일의구조까지 표준사양으로 기술하고 있다. CLI 규격을 마이크로소프트에서 구현한 실체가 바로 CLR이다. 또한 마이크로소프트에서는 CLI를 외부에서도 쉽게 구현할 수 있게 최소한의 코드로 CLI를 구현한 SSCLI(Shared Source CLI)를 함께 공개했다. 그 외에 모노(Mono) 프레임워크라는 또 다른 CLI 구현체가 오픈소스로 꾸준히 개발되고 있으며 이 프레임워크는 리눅스, iOS, 안드로이드까지 지원하고 있다.
|
|
|
|
|
|
|
|
CLR 자체를 관리 환경(Managed Enviroment)라고도 하고, clr이 로드되는 프로세스를 기존의 네이티브 프로세스와 구별해 관리 프로세스(Managed Process)라고 한다.
|
|
|
|
|
|
|
|
#### 닷넷 프레임워크
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| .NET 버전 | .NET 의 변화 | C#의 변화 | 기타 |
|
|
|
|
| -------- | ----------- | -------- |----- |
|
|
|
|
| 1.0 ~ 1.1 | 최초 버전 | C# 1.0 발표 |
|
|
|
|
| 2.0 | **Generic 제공** | Generic, 익명 함수 문법 추가 |
|
|
|
|
| 1.0 ~ 1.1 | LINQ, WCF, WPF, WF | C# 1.0 발표 |
|
|
|
|
| 1.0 ~ 1.1 | DLR(Dynamic Language Runtime) 추가 | C# 1.0 발표 |
|
|
|
|
| 1.0 ~ 1.1 | 비동기 지원 | C# 1.0 발표 |
|
|
|
|
| 1.0 ~ 1.1 | 로슬린(Roslyn) 컴파일러 및 RyuJIT 도입 | 이전 버전들에서 볼 수 있었던 기능의 추가보다는 코드를 간결하게 유지할 수 있는 문법을 다수 추가 |
|
|
|
|
|
|
|
|
|
|
|
|
C#버전, .Net Framework 버전, Visual Studio 버전
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
* Visual Studio .Net (7.0)
|
|
|
|
닷넷 1.0버전을 끼고 나온 비주얼 스튜디오. C#의 데뷔작
|
|
|
|
|
|
|
|
* Visual Studio.Net 2003 (7.1)
|
|
|
|
|
|
|
|
* .NET Framework 버전 및 종속성
|
|
|
|
|
|
|
|
.NET Framework의 각 버전에는 CLR, Base Class Libraries 및 기타 관리되는 라이브러리들이 포함돼 있다.
|
|
|
|
|
|
|
|
Visual Studio는 나열된 .Net Framework 버전으로 사용이 제한되지 않도록 multi-targeting기능을 제공한다.
|
|
|
|
|
|
|
|
새 .NET Framework 버전에서는 각각 이전 버전의기능을 유지하며 새 기능을 추가한다.
|
|
|
|
CLR 은 고유한 버전 번호로 식별된다. CLR 버전은 매번 증가하지 않지만, .NET Framework 버전 번호는 각 릴리즈 마다 증가합니다. 예를 들어 .NET Framework 4, 4.5 및 이후 릴리즈에는 CLR 4가 포함되지만 .NET Framework 2.0, 3.0 및 3.5에는 CLR 2.0이 포함됩니다. CLR 버전 3이 포함된 .NET Framework 버전은 없습니다.
|
|
|
|
|
|
|
|
.Net Frmaewor Version 확인 : https://msdn.microsoft.com/ko-kr/library/bb822049(v=vs.110).aspx
|
|
|
|
|
|
|
|
https://msdn.microsoft.com/en-us/library/vstudio/bb822049(v=vs.100).aspx
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
CLR은 마이크로 소프트 이니셔티브에서 제공하는 가상 머신의 구성요소 입니다.
|
|
|
|
|
|
|
|
#### 닷넷 프레임워크 managed unmanaged
|
|
|
|
|
|
|
|
## Managed code
|
|
|
|
Managed code는 Visual Studio 2003 버전이 발표되면서 MS에서 만들어낸 개념이다. 일반적으로
|
|
|
|
Managed code란 VB .NET 또는 C# 컴파일러가 생성한 코드이다. 컴파일러를 통해서 컴파일 된 Managed Code는 컴퓨터에서 바로 실행할 수 없는 중간언어(IL)이다. 이 IL은 CLR기반에서 실행이 된다.
|
|
|
|
VB .NET과 C#은 Managed Code만 생성이 가능하다. 하지만 VC++은 Managed Code와 Unmanaged Code를 둘다 만들 수 있다.
|
|
|
|
|
|
|
|
#### unmanaged code
|
|
|
|
unmanaged code는 Visual Studio .Net 2002가 릴리즈 되기 이전의 코드를 말하는데, 이는 VB 6.0 등에서 사용된 코드이다. unmanaged code는 코드라 바로 Machine Code로 컴파일되고, 컴파일한 Machine 과 동일한 칩을 사용하는 환경에서만 실행이 가능하다. unmanaged code는 보안, 메모리 관리 등에 대해서 컨트롤 하지 않습니다.
|
|
|
|
|
|
|
|
vc++에서 MFC, ATL, Win32프로젝트를 생성하면 Unmanaged Code로 컴파일되고,
|
|
|
|
|
|
|
|
** managed code 장점?**
|
|
|
|
확장성
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 참고자료
|
|
|
|
http://guslabview.tistory.com/56
|
|
http://guslabview.tistory.com/56
|
|
http://egloos.zum.com/duckii/v/1293394
|
|
http://egloos.zum.com/duckii/v/1293394
|
|
Interoperability with managed and unmanaged code
|
|
|
|
http://stackoverflow.com/questions/21171415/c-code-that-compiles-as-managed-net-in-visual-studio-c-cli-and-as-native
|
|
http://stackoverflow.com/questions/21171415/c-code-that-compiles-as-managed-net-in-visual-studio-c-cli-and-as-native
|
|
http://allthingsit.tistory.com/35
|
|
http://allthingsit.tistory.com/35
|
|
|
|
https://msdn.microsoft.com/en-us/library/vstudio/bb822049(v=vs.100).aspx
|
|
#### 이미지 출처
|
|
https://msdn.microsoft.com/ko-kr/library/bb822049(v=vs.110).aspx
|
|
|
|
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf
|
|
This part gives a basic introduction to the CLI, the components of the CLI and CLR and the features of the CLR.
|
|
http://www.c-sharpcorner.com/Blogs/11177/clr-C-Sharp-and-dot-net-version-comparison-chart.aspx
|
|
|
|
|
|
Common Language Infrastructure (CLI)
|
|
|
|
|
|
|
|
CLI is a specification developed by Microsoft that describes the executable code and runtime environment. In simple terms this allows us to use various high level languages on various machines without rewriting the code.
|
|
|
|
|
|
|
|
CLI is divided into four main components.
|
|
|
|
|
|
|
|
Common type system (CTS)
|
|
|
|
|
|
|
|
CTS defines some basic data types and every language that is designed for use with .NET framework should be able to match its data types to these defined basic data types. So when various languages are designed following CTS, they will be able to communicate with each other and this is nothing but cross-language interoperability or communication.
|
|
|
|
|
|
|
|
Common Language Specification (CLS)
|
|
|
|
|
|
|
|
CLS is a set of specifications that must be met by every language to be considered as .NET compliant. It is a subset of CTS types and a set of rules. Example: Elimination of pointers and multiple inheritance.
|
|
|
|
|
|
|
|
Metadata
|
|
|
|
|
|
|
|
Metadata gives information about all the classes and the class members defined in the assembly. You will learn later what an assembly means.
|
|
|
|
|
|
|
|
Virtual Execution System (VES)
|
|
|
|
|
|
|
|
VES loads and runs the programs that are compatible with the CLI using metadata.
|
|
|
|
|
|
|
|
To make it clear, CLI is a set of specifications for a virtual operating system that is nothing but a Common Language Runtime (CLR).
|
|
|
|
|
|
|
|
Common Language Runtime (CLR)
|
|
|
|
|
|
|
|
Is the virtual machine component in the .NET Framework better known as the runtime and is responsible for executing .NET programs.
|
|
|
|
|
|
|
|
The following are the features of the CLR:
|
|
|
|
Memory management
|
|
|
|
Exception handling
|
|
|
|
Code access security
|
|
|
|
Thread execution
|
|
|
|
Debugging
|
|
|
|
Verification & Compilation
|
|
|
|
|
|
|
|
CLI Specification : http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf 문서이다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|