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

|
|
|
|
|
|
|
|
위의 그림을 보면 C#컴파일러는 CLR를 로드하는 코드와 C#소스코드를 기계어가 아닌 CIL 코드로 EXE/DLL 파일 내부에 생성한다. 따라서 사용자가 C#으로 개발된 애플리케이션을 실행하면 내부적으로 CLR이 먼저 로드된다. 이어서 CLR은 EXE 파일 내에 있는 IL코드를 로드해서 실행시킨다.
|
|
|
|
_ _ _
|
|
|
|
|
|
|
|
#### CLI
|
|
|
|
|
|
|
|
#### 공통 중간 언어(CIL: Common Intermediate Language)
|
|
|
|
자바의 VM에서는 중간 언어를 특별히 바이트 코드(Byte Code)라고 한다. 이와 마찬가지로 닷넷의 CLR에서는 이를 CIL이라고 하며, 보통은 줄여서 IL 코드, 또는 MSIL 코드라고 한다. 이는 CPU에 독립적인 결과물로서, 모든 닷넷 호환언어는 소스코드를 IL 코드로 컴파일하고, CLR이 실행될 때 IL 코드를 CPU의 기계어로 최종 번역한다. IL 코드에는 자체적인 프로그래밍 문법이 있으며 ILASM.EXE라는 전용 컴파일러도 있다. IL코드는 가상 머신에서 실행된다는 의미에서 일종의 기계어와 유사하다.
|
|
|
|
|
|
|
|
#### 공통 타입 시스템(CTS: Common Language Specification)
|
|
|
|
닷넷 호환 언어가 지켜야 할 타입(Type)의 표준 규격을 정의한 것이 공용 타입 시스템이다. 예를 들어 CTS 에서는 클래스의 상속을 하나만 받을 수 있도록 정의하고 있다. 따라서 직접 닷넷 호환 언어를 만든다면 클래스의 다중 상속을 지원하도록 만들 수는 없다. 즉, 닷넷 호환 언어는 CTS의 한계를 넘어서 구현할 수 없다.
|
|
|
|
|
|
|
|
#### 공용 언어 사양(CLS: Common Language Specification)
|
|
|
|
닷넷 호환 언어가 지켜야할 최소한의 언어 사양을 정의한 것이다. CTS 전체를 구현할 필요는 없지만 CLS에 명시된 사양만큼은 완벽하게 구현해야 한다. 닷넷 호환 언어끼리는 서로 사용할 수 있고 상속을 받을 수 있다. 이 경우에는 CLS를 만족 시키도록 작성해야 한다는 것이다.
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
_ _ _
|
|
|
|
|
|
|
|
#### CLR
|
|
|
|
#### JIT 컴파일러
|
|
|
|
|
|
|
|
_ _ _
|
|
|
|
|
|
|
|
|
|
|
|
#### 어셈블리
|
|
|
|
** 어셈블리 :** c#으로 프로그램을 하는 경우 대개 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이러한 실행파일을 어셈블리(Assembly)라고 한다. 닷넷에서 특별한 언급이 없다면 어셈블리는 실행 파일(EXE, DLL)을 의미한다.
|
|
|
|
|
|
|
|
** 매니페스트 : ** JIT 컴파일러가 어셈블리의 IL 코드를 기계어 코드로 컴파일하는 과정에서 어떤 Class 타입이 현재 어셈블리내에 정의되어 있는지 정의되어 있지 않다면 다른 어셈블리의 이름 정보(사용자 친화적인 어셈블리명, 버전번호, 컬쳐, 공개키)를 얻는다. 이 참조 어셈블리에 이름 정보가 곳이 메니페스트(Menifest)이다.
|
|
|
|
|
|
|
|
** Type Metadata :** 어셈블리에서 사용하는 모든 형식에 대한 구체적인 정보를 가지고 있다. 리플렉션이 가능하게 한다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
#### 어셈블리, 모듈, 매니페스트
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
메니페스트를 포함하고 있지 않은 모듈은 보통 확장자가 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
|
|
https://en.wikipedia.org/wiki/.NET_Framework
|
... | @@ -24,10 +131,10 @@ GAC(Global Assembly Cache) | GAC는 컴퓨터에서 실행되는 닷넷 응용 |
... | @@ -24,10 +131,10 @@ GAC(Global Assembly Cache) | GAC는 컴퓨터에서 실행되는 닷넷 응용 |
|
|
|
|
|
|
|
|
|
## 목표
|
|
## 목표
|
|
**1번 주제는 닷넷프레임워크 및 개발 환경에 대한 이해입니다. .Net Framework, CLR, CTS, 어셈블리, Managed, Unmanaged 등에 대한 정리를 해주시구요. C#버전, .Net Framework 버전, Visual Studio 버전 간의 상관관계도 정리해주시길 바랍니다.**
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
#### 닷넷 프레임워크
|
|
#### 닷넷 프레임워크
|
|
2002년에 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 **프로세스 가상 머신**에 속한다. 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과는 달리, 닷넷 프레임워크로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다.
|
|
2002년에 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 **프로세스 가상 머신**에 속한다. 일반적인 네이티브 언어로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과는 달리, 닷넷 프레임워크로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행된다.
|
... | @@ -42,10 +149,7 @@ CLR은 프로세스(EXE)가 실행되면 메모리에 함께 적재돼 실행된 |
... | @@ -42,10 +149,7 @@ CLR은 프로세스(EXE)가 실행되면 메모리에 함께 적재돼 실행된 |
|
|
|
|
|
C# 컴파일러는 소스코드를 기계어가 아닌 IL(Intermediate Language)이라고 하는 중간 언어로 EXE/DLL 파일 내부에 생성한다. 또한 프로그램이 시작하자마자 CLR을 로드하는 코드를 자동으로 자동으로 EXE 파일 내부에 추가한다.
|
|
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)
|
|
##### CIL(CIL : Common Intermediate Language)
|
... | @@ -67,43 +171,13 @@ C# 컴파일러로 빌드하면 중간 언어인 IL 코드로 변환된다. IL |
... | @@ -67,43 +171,13 @@ C# 컴파일러로 빌드하면 중간 언어인 IL 코드로 변환된다. IL |
|
#### 공용 언어 사양(Commom Language Specification)
|
|
#### 공용 언어 사양(Commom Language Specification)
|
|
|
|
|
|
닷넷 호환 언어가 지켜야 할 최소한의 언어 사양을 정의한 것이 공용 언어 사양(CLS)이다. 닷넷 호환 언어는 CTS 전체를 구현 할 필요는 없지만 CLI에 명시된 사양만큼은 완벽하게 구현해야 한다.
|
|
닷넷 호환 언어가 지켜야 할 최소한의 언어 사양을 정의한 것이 공용 언어 사양(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)라고 한다. 프로그래밍 언어에서는 개발자가 구현한 코드가 데이터에 해당하고, 해당 코드의 성격을 설명해 주는 별도의 데이터를 메타데이터라고한다.
|
|
데이터를 위한 데이터를 메타데이터(Metadata)라고 한다. 프로그래밍 언어에서는 개발자가 구현한 코드가 데이터에 해당하고, 해당 코드의 성격을 설명해 주는 별도의 데이터를 메타데이터라고한다.
|
|
CLR에서 동작하는 실행파일은 완전하게 자기 서술적인(self-descriptive) 메타데이터를 제공하며, 외부에서는 이러한 정보를 리플렉션(Reflection)이라고하는 기술을 통해 사용 할 수 있다. 다른 사람이 만든 EXE/DLL 파일에서 어떤 클래스와 메서드가 제공되는지 확인하고 싶다면 이 메타데이터를 통해 알 수 있다.
|
|
CLR에서 동작하는 실행파일은 완전하게 자기 서술적인(self-descriptive) 메타데이터를 제공하며, 외부에서는 이러한 정보를 리플렉션(Reflection)이라고하는 기술을 통해 사용 할 수 있다. 다른 사람이 만든 EXE/DLL 파일에서 어떤 클래스와 메서드가 제공되는지 확인하고 싶다면 이 메타데이터를 통해 알 수 있다.
|
|
|
|
|
|
- - -
|
|
|
|
#### 어셈블리, 모듈, 매니페스트
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c#으로 프로그램을 하는 경우, 대개 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이러한 실행파일을 어셈블리(Assembly)라고 한다. 닷넷에서 특별한 언급이 없다면 어셈블리는 실행 파일(EXE, DLL)을 의미한다.
|
|
|
|
|
|
|
|
어셈블리는 1개 이상의 모듈(Module)로 구성되는데, 이때 모듈 하나당 한 개의 파일이 대응된다. 그런데 여러 개의 파일이 하나의 어셈블리를 구성하고 있고 이 파일 목록을 관리하는 메니페스트(Manifest)데이터를 담고 있는 파일이 있다.
|
|
|
|
|
|
|
|
메니페스트를 포함하고 있지 않은 모듈은 보통 확장자가 netmodule이다. 매니페스트를 포함하는 경우에는 확장자가 DLL(또는 EXE)이다.
|
|
|
|
|
|
|
|
|
|
|
|
IL은 어셈블리라 불리는 파일에 저장이되는데 어셈블리에는 메타데이터와 같이 저장이 된다. 메타데이터에는 클래스, 메소드, 속성
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
#### 공용 언어 기반구조(Common Language Infrastructure)
|
|
#### 공용 언어 기반구조(Common Language Infrastructure)
|
|
|
|
|
... | @@ -175,6 +249,7 @@ http://guslabview.tistory.com/56 |
... | @@ -175,6 +249,7 @@ 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
|
|
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
|
|
|
|
|
|
#### 이미지 출처
|
|
#### 이미지 출처
|
|
|
|
|
... | | ... | |