본문 바로가기

Programming/.NET

[.NET] .NET 어셈블리(어셈블리의 구성)

어셈블리의 구조

어셈블리는 메타데이터를 포함한 어셈블리 매니페스트,  형식 메타데이터, MSIL(CIL)과 리소스로 구성되어 있다고 앞서 간단하게 설명했습니다.

매니페스트에는 어셈블리의 정보가 기록되어 있습니다.
해당 어셈블리의 이름, 버전, 문화권, 강력한 이름, 어셈블리에 포함된 파일 목록 등 어셈블리의 정보를 가지는 부분입니다. 이러한 매니페스트는 MSIL 코드가 있는 PE 파일(.exe 또는 .dll)에 저장되거나 어셈블리 매니페스트 정보만 포함하는 독립 실행형 PE 파일에 저장됩니다.
하나의 연관파일을 가지는 경우 매니페스트는 PE 파일에 포함되어 단일 파일 어셈블리를 구성하며, 독립 실행형 매니페스트 파일을 만들거나 어셈블리의 PE 파일 중 하나에 매니페스트를 포함시키면 다중 파일 어셈블리를 만들 수 있습니다.

 

단일 파일 어셈블리와 다중 파일 어셈블리의 구성

그리고 프로그램의 형식을 나타내는 형식 메타데이터와 리소스는 해당 어셈블리의 기능이 추가되는 부분입니다.
어셈블리는 매니페스트만 구성해도 정보는 가지지만 형식 메타데이터와 리소스를 추가하여 의미 있는 기능을 가지게 되는 것입니다.

마지막으로 실제로 형식을 구현하는 MSIL는 Microsoft Intermediate Language의 준말입니다.
컴파일 시 컴파일러가 해당 코드를 msil로 변환하는 작업을 수행하며 런타임 시 이렇게 변환된 MSIL 코드를 다시 CLR의 JIT 컴파일러가 네이티브 코드로 변환하여 작업을 수행하는 것입니다.

 

개인적으로 중요하다 생각하는 부분만 요약하여 다루었습니다. 더 자세한 내용은 마이크로 소프트에서 찾아보면 더 많은 정보를 확인할 수 있습니다.

참조: https://docs.microsoft.com/ko-kr/dotnet/standard/assembly/

'Programming > .NET' 카테고리의 다른 글

[C#] C# 이란, C#의 특징  (0) 2020.01.28
[.NET] .NET 리플렉션  (0) 2020.01.14
[.NET] .NET 어셈블리(어셈블리의 종류)  (0) 2020.01.10
[.NET] 강력한 이름  (0) 2020.01.07
[.NET] CLR, CTS와 CLS  (0) 2020.01.06