.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)
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++의 경우 다중상속을 지원하지만, .NET Framework에서는 다중상속을 지원하지 않는다. 따라서 다중상속으로 정의된 c++객체는 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) 코드의 실행과 보안
##### CLR Execution model todo-이미지 추가
##### 실행 엔진 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 literally that, the base. It contains basic, fundamental types like System.String and System.DateTime.
The Framework Class Library (FCL) is the wider library that contains the totality: ASP.NET, WinForms, the XML stack, ADO.NET and more. You could say that the FCL includes the BCL.
Assembly
C#.VB.Net 및 다른 .Net 언어들로 짜여진 소스코드를 컴파일 하여 생성되는 결과인 .exe or .dll파일을 Assembly라고 한다.
Assembly 구조:
todo-이미지추가
##### 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 |