.NET Framework
##### .NET Framework is: 1. 다양한 언어와 라이브러리가 매끄럽게 함께 작동하는 실행 및 개발 환경을 구축하는 기준이 되는 Common language infrastructure (CLI) 규약을 Microsoft에서 구현한 것 2. .NET 애플리케이션을 개발하고 실행할 수 있는 환경 (Platform)

.NET Architecture is:
1. Multi-language를 지원한다.
2. Cross-platform을 지원한다.
3. CLR, FCL and JIT 기술을 바탕으로 한다.
Common language infrastructure (CLI)
##### Common language infrastructure (CLI) is: 1. Microsoft사에서 ECMA표준에 제출한 규약이다. 2. 실행 코드의 형태에 대한 명세를 제공한다. * Common type system (CTS): CLI규약을 따르는 모든 언어가 지켜야 할 타입의 규격 * Common language specification (CLS): CLI규약을 따르는 모든 언어가 지켜야 하는 최소한의 언어사양 * Meta-data 3. 실행 코드가 실제 실행되는 환경(Virtual Execution System)에 대한 명세를 제공한다. 4. CLI명세를 기반으로 생성되는 실행 코드를 CIL 혹은 IL이라 한다. 5. CLI명세를 기반으로 .NET Framework에서 제공하는 Virtual Execution System을 CLR이라 한다. 6. CLI명세를 기반으로 만들어진 실행환경이 있다면, .NET Framework에서 생성되는 IL코드를 실행 할 수 있다. (ex. 모노(mono))
Common type system (CTS) is:
1. 공용 언어가 지켜야 할 타입(클래스, 구조체, 인터페이스, 형 선언 등)의 표준 규격이다. 그렇다고 해서 문법은 아니다.
예를 들면 C#은 int8 형을 가지고 있고, VB.net은 integer형이 있다.
그런데 이것이 .net 컴파일러를 거치면서 CTS에서 정의된 INT32형태로 동일하게 사용이 된다
Common Language Specification (CLS) is:
1. CTS의 sub-set이며 공용언어간 호환이 되기 위해 준수해야 하는 최소한의 언어 규칙이다.
2. 공용 언어는 CTS전체를 구현할 필요는 없지만 CLS에 정의된 내용만큼은 구현을 해야 한다.
3. 이를 통해 서로 다른 언어를 섞어서 프로그램을 만드는 것이 가능하다.
* 프로그램 전체를 CLS에 맞춰 구현할 수 있다.
* 다른 언어와 함께 사용되는 영역에 한해서만 CLS에 맞춰 구현할 수 있다.
4. 예를 들면 c++/CLI의 경우 다중상속을 지원하지만, .NET Framework에서는 다중상속을 지원하지 않는다.
따라서 다중상속으로 정의된 c++/CLI객체는 c#에서는 사용할 수 없다.
Meta-data is:
1. CLI에서 meta-data는 CTS에 정의된 타입을 참조하고 설명하기 위해 사용된다.
A. Type Descriptions
i.Classes
ii.Base Classes
iii.Implemented interface
iv.Data members
v.Methods
B. Assembly manifest
i.Name
ii.Version
iii.Culture
1.Other assemblies
2.Security permissions
3.Exported types
2. 임의의 특정 언어에 독립적인 방식으로 저장(유지)된다.
3. Reflection이라는 실행 중에 클래스나 객체의 타입 정보를 조사하는 기능을 통해 meta-data를 사용할 수 있다.
이 기능을 사용하면 실행 중에 다른 모듈에 선언된 인스턴스를 생성할 수 있고 메서드를 호출할 수도 있다.
Virtual Execution System (VES) is:
1. CLI에 맞춰 작성된 프로그램을 로드하고 실행하는 시스템이다.
2. 코드가 실행함에 있어 필요로 하는 모듈들을 연결하기 위해 meta-data를 사용하여 manage code 및 data를 실행한다.
3. .NET Framework에서 CLR을 통해 제공한다.
Common Intermediate Language (CIL) is:
1. Virtual Execution System (VES)에 의해 해석되는 중간 언어로 자바의 byte-code에 해당한다.
2. machine독립적인 코드이다.
3. .NET Framework에서는 이를 MSIL로 부른다.
4. .NET Framework에서 source code가 타깃 머신의 native code로 변환되는 과정은 아래 그림과 같다.

CLR (Common Language Runtime)
CLI명세를 기반으로 Microsoft에서 작성한 Virtual Execution System을 CLR이라 한다.
.Net Framework의 핵심 중의 핵심으로 코드를 실행하고 메모리를 자동 관리하며 형식의 안정성을 보장하는 등 여러 가지 실행시간 서비스(환경)를 제공한다.
A common runtime for all .NET languages
1. Common type system (CTS)
2. Common metadata
3. native code로 컴파일 하기 위한 Intermediate Language (IL)
4. 메모리 할당과 garbage collection
5. Intermediate Language (IL) 코드의 실행과 보안
실행 엔진
1. Compiles Microsoft Intermediate Language (MSIL) into native code
2. Handles garbage collection
3. Handles exception
4. Enforces code access security
5. Handles verification
CLR의 장점
1. Inter-operation between managed code and unmanaged code (COM, DLLs)
2. Managed code environment
3. Improved memory handling
4. Improved "garbage collection"
5. JIT allows code to run in a protected environment as managed code
6. JIT allows the IL code to be hardware independent
7. CLR also allows for enforcement of code access security
8. Access to Metadata
Framework Class Library (FCL) vs. Base Class Library (BCL)
##### The Base Class Library (BCL) is: 1. 기본 클래스 라이브러리 2. System.String and System.DateTime과 같은 기본 타입이 포함되어 있다. 3. 파일을 제어 하거나 데이터베이스에 접근하거나 네트워크를 제어 할수 있는 기능이 포함되어 있다.
The Framework Class Library (FCL) is:
1. FCL 은 BCL을 포함하고 다음의 라이브러리까지 포함한다.
- ASP.NET
- WinForms
- XML stack
- ADO.NET and more
Assembly
C#.VB.Net 및 다른 .Net 언어들로 짜여진 소스코드를 컴파일 하여 생성되는 결과인 .exe or .dll파일을 Assembly라고 한다.
##### Assembly 구조:

Assembly 실행과정:
1. 어셈블리가 CLR로 로드 된다.
2. CLR은 manifest 포함 된 정보를 기반으로 다양한 작업을 수행한다.
3. 보안 요구사항이 충족되면 CLR은 JIT(Just In Time) 컴파일을 수행하여 IL코드를(Native Code)로 변환 한다.
Managed vs. Unmanaged
##### Managed code is: 1. CLR에서 실행되는 코드이다. (any .NET language) 2. low level language인 IL(MSIL) 코드로 표현된다. 3. metadata를 가진다. 4. 타입의 불법적인 사용으로 부터 보호된다.(type-safe) 5. 플랫폼 독립적이다.(Windows, Linux, Max OS x, etc.)
Managed data is:
1. garbage collection를 통해 자동으로 할당되고, 해제되는 데이터를 말한다.
Unmanaged code is:
1. 메모리 및 타입의 불법 사용에 대한 보호가 없다. (No protection of memory and type-safety)
2. metadata가 없다.
3. 실행되는 machine에 종속적인 코드로 컴파일 된다.
.Net , C#, Visual Studio, OS
.NET | 1.0 | 1.1 | 2.0 | 3.0 | 3.5 | 4.0 | 4.5 | 4.6 |
---|---|---|---|---|---|---|---|---|
C# | 1.0 속성, 대리자, 값타입 |
N/A | 2.0 제네릭 |
N/A | 3.0 링큐,람다,확장메소드 |
4.0 동적바인딩 |
5.0 Async |
6.0 |
Visual Studio | 2002 | 2003 | 2005 | 2008 | 2010 | 2013 | 2015 | |
CRL | 1.0 | 1.1 | 2.0 | 2.0 WCF, WPF |
2.0 LINQ |
4.0 parallel |
4.0 Asynchronous model |
4.0 |
Windows OS | N/A | server2003 | server2003 R2 | vista, server2008 | win7, server2008 R2 | N/A | win8, win10, sserver2012 |
내용 및 이미지 출처
FCL vs. BCL 및 순순 .NET Framework의 내용을 제외한 대부분은 ECMA-335 문서의 내용을 토대로 작성되었습니다.
Image1/2(.NET Framework): msdn.microsoft.com
Image4(Assembly): hoons.net