|
|
#작성중
|
|
|
|
|
|
### 닷넷 프레임워크
|
|
|
닷넷 프레임워크는 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경이다. .NET Framework 는 방대한 class library(Framework Class Library) 와 몇몇 language 들 간의 language interoperability 를 제공한다. .NET Framework 로 생성된 언어는 Common Language Runtime(CLR)라는 application virtual machine에서 실행된다.
|
|
|
|
|
|
|
|
|
https://en.wikipedia.org/wiki/.NET_Framework
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
네트워크 작업, 인터페이스 등 많은 작업을 캡슐화 하였고, CLR이라는 Virtual Machine 위에서 동작한다.
|
|
|
닷넷 프레임워크 = CLR + 부가 구성 요소
|
|
|
|
|
|
부가 구성 요소 | 설명
|
|
|
-------------- | -------------
|
|
|
BCL(Base Class Library) | 마이크로소프트는 특정 기능을 수행하는 타입을 미리 만들어 놓았으며 개발자는 이 기능을 이용해 좀 더 쉽게 응용 프로그램을 개발 할 수 있다.
|
|
|
부가적인 실행파일 | 마이크로소프트는 닷넷 프레임워크에 기본적으로 C#, VB.NET 컴파일러를 제공하고 있으며, 그 외에도 각종 유틸리티 성격의 실행 파일을 포함시켜뒀다.
|
|
|
GAC(Global Assembly Cache) | GAC는 컴퓨터에서 실행되는 닷넷 응용 프로그램이 어셈블리 파일을 공통적으로 찾을 수 있는 전역 저장소다. 일반적으로는 C:\Windows\assembly 폴더에 위치하고 각종 DLL 파일을 담고 있다.
|
|
|
|
|
|
|
|
|
### CLI (Common Language Infrastruct)
|
|
|
|
|
|
|
|
|
## 목표
|
|
|
**1번 주제는 닷넷프레임워크 및 개발 환경에 대한 이해입니다. .Net Framework, CLR, CTS, 어셈블리, Managed, Unmanaged 등에 대한 정리를 해주시구요. C#버전, .Net Framework 버전, Visual Studio 버전 간의 상관관계도 정리해주시길 바랍니다.**
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
#### 닷넷 프레임워크
|
|
|
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 파일 내부에 추가한다.
|
|
|
|
|
|
C# -> IL(Intermediate Language)
|
|
|
C#과 같이 IL로 번역되는 언어를 닷넷 호환 언어(.NET-Compliant Language)라고 한다.
|
|
|
|
|
|
닷넷 호환 언어 : C#, Visual Basic, .NET, F#, C++/CLI가 있다.
|
|
|
|
|
|
|
|
|
##### CIL(CIL : Common Intermediate Language)
|
|
|
|
|
|
자바의 VM에서는 중간 언어를 바이트 코드(Byte code)라고 한다.
|
|
|
닷넷은 CLR에서는 중간 언어를 CIL라고하며 줄여서 IL 또는 MSIL 코드라고 한다. 이는 **CPU에 독립적인 결과물(CPU에 의존적인 결과물은 컴파일 하고난 소스코드를 컴파일하면 CPU의 기계어로 컴파일되나.)**로서, 모든 닷넷 호환 언어는 소스코드를 IL 코드로 컴파일하고, CLR이 실행될 때 IL 코드를 CPU의 기계어로 최종 번역한다.
|
|
|
|
|
|
|
|
|
C# 컴파일러로 빌드하면 중간 언어인 IL 코드로 변환된다. IL 코드는 가상머신에서 실행된다는 의미로 일종의 기계어와 유사하다. 기계어와 일대일 대응되는 어셈블리 언어가 있는 것 처럼 IL 코드도 일대일 대응되는 IL 언어가 따로 있다.
|
|
|
|
|
|
닷넷 호환 언어는 두 가지 방법으로 구현되고 있다.
|
|
|
**첫 번째는 C#언어처럼 COBOL 소스코드에서 곧바로 중간 언어를 생성하도록 만들 수 있다.**
|
|
|
두 번째는 COBOL 소스코드를 일단 IL 소스코드로 변환한 다음 그것을 컴파일할 수 있는 ilasm.exe의 도움을 받아 실행파일을 만드는 유형도 있다.
|
|
|
|
|
|
#### 공용 타입 시스템 (Common Type System)
|
|
|
|
|
|
닷넷 호환 언어가 지켜야 할 타입(Type)의 표준 규격을 정의한 것이 공용 타입 시스템(CTS)이다.
|
|
|
|
|
|
#### 공용 언어 사양(Commom Language Specification)
|
|
|
|
|
|
닷넷 호환 언어가 지켜야 할 최소한의 언어 사양을 정의한 것이 공용 언어 사양(CLS)이다. 닷넷 호환 언어는 CTS 전체를 구현 할 필요는 없지만 CLI에 명시된 사양만큼은 완벽하게 구현해야 한다.
|
|
|
_ _ _
|
|
|
|
|
|
#### 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.
|
|
|
- - -
|
|
|
|
|
|
#### 메타데이터
|
|
|
|
|
|
데이터를 위한 데이터를 메타데이터(Metadata)라고 한다. 프로그래밍 언어에서는 개발자가 구현한 코드가 데이터에 해당하고, 해당 코드의 성격을 설명해 주는 별도의 데이터를 메타데이터라고한다.
|
|
|
CLR에서 동작하는 실행파일은 완전하게 자기 서술적인(self-descriptive) 메타데이터를 제공하며, 외부에서는 이러한 정보를 리플렉션(Reflection)이라고하는 기술을 통해 사용 할 수 있다. 다른 사람이 만든 EXE/DLL 파일에서 어떤 클래스와 메서드가 제공되는지 확인하고 싶다면 이 메타데이터를 통해 알 수 있다.
|
|
|
|
|
|
- - -
|
|
|
#### 어셈블리, 모듈, 매니페스트
|
|
|
|
|
|
|
|
|
|
|
|
c#으로 프로그램을 하는 경우, 대개 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이러한 실행파일을 어셈블리(Assembly)라고 한다. 닷넷에서 특별한 언급이 없다면 어셈블리는 실행 파일(EXE, DLL)을 의미한다.
|
|
|
|
|
|
어셈블리는 1개 이상의 모듈(Module)로 구성되는데, 이때 모듈 하나당 한 개의 파일이 대응된다. 그런데 여러 개의 파일이 하나의 어셈블리를 구성하고 있고 이 파일 목록을 관리하는 메니페스트(Manifest)데이터를 담고 있는 파일이 있다.
|
|
|
|
|
|
메니페스트를 포함하고 있지 않은 모듈은 보통 확장자가 netmodule이다. 매니페스트를 포함하는 경우에는 확장자가 DLL(또는 EXE)이다.
|
|
|
|
|
|
|
|
|
IL은 어셈블리라 불리는 파일에 저장이되는데 어셈블리에는 메타데이터와 같이 저장이 된다. 메타데이터에는 클래스, 메소드, 속성
|
|
|
|
|
|

|
|
|
|
|
|
#### 공용 언어 기반구조(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://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
|
|
|
|
|
|
#### 이미지 출처
|
|
|
|
|
|
This part gives a basic introduction to the CLI, the components of the CLI and CLR and the features of the CLR.
|
|
|
|
|
|
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 문서이다.
|
|
|
|
|
|
|
|
|
|
|
|
|