- 어셈블리(Assembly)는 .NET의 기본 배치(deployment) 단위이다. 모든 형식은 어셈블리 안에 담긴다. 하나의 어셈블리는 컴파일된 형식과 해당 IL(Intermediate Language) 코드, 실행시점 자원, 그리고 보조 정보(버전 관리, 보안, 다른 어셈블리 참조 등을 위한)로 구성된다.
- 보통의 경우 하나의 어셈블리는 하나의 Windows PE(Portable Executable) 파일인데, 응용 프로그램 실행 파일(executable)에 해당하는 어셈블리 파일의 확장자는 .exe이고 재사용 가능한 라이브러리의 확장자는 .dll이다.
- 이번 장에 등장하는 형식들은 대부분 다음 이름공간들에 정의되어 있다.
어셈블리의 구성
- 어셈블리를 구성하는 요소는 다음 네 가지이다.
- 이들 중 필수인 것은 어셈블리 매니페스트 뿐이다. 그러나 WinRT 참조 어셈블리가 아닌 한 어셈블리에는 거의 항상 컴파일된 형식들이 들어 있다.
- 실행 파일 어셈블리와 라이브러리 어셈블리의 구조는 거의 같다. 주된 차이는 실행 파일 어셈블리에는 진입점(entry point)이 정의되어 있다는 점이다.
어셈블리 매니페스트
- 어셈블리 매니페스트의 목적은 다음 두 가지이다.
- 이런 목적을 위해, 어셈블리는 자기 서술적(self-describing)으로 만들어진다. 즉, 어셈블리의 소비자는 다른 파일들을 참고할 필요 없이 어셈블리 파일만 보고도 어셈블리의 모든 자료와 형식, 기능을 알 수 있다.
- 프로그래머가 어셈블리 매니페스트를 어셈블리에 직접 추가하지는 않는다. 어셈블리 매니페스트는 컴파일 과정에서 자동으로 어셈블리에 내장된다.
- 어셈블리 매니페스트에 담긴 자료 중 기능상 중요한 자료를 요약하자면 다음과 같다.
- 어셈블리 매니페스트에 다음과 같은 정보성 자료가 들어 있을 수도 있다.
- 이 자료의 일부는 컴파일 시 지정한 옵션들에서 비롯된다. 이를테면 참조하는 어셈블리 목록이나 서명용 공개 키 등이 그렇다. 그 나머지는 어셈블리 특성들(목록에서 괄호 안에 표히된)에서 비롯된다.
- 어셈블리 매니페스트의 내용을 .NET 도구 중 하나인 ildasm.exe로 볼 수 있다.
어셈블리 특성의 지정
- 어셈블리 매니페스트 내용의 상당 부분을 어셈블리 특성으로 제어할 수 있다. 예컨대 다음과 같다.
[assemly: AssemblyCopyright("\\x00a9 Corp Ltd. All rights reserved.")]
[assemly: AssemblyVersion("2.3.2.1")]
- 보통은 이런 선언들을 모두 프로젝트의 한 파일에 담아 둔다. Visual Studio에서 C# 프로젝트를 생성하면 Properties 폴더에 AssemblyInfo.cs라는 파일이 생기는데, 여기에 기본적인 어셈블리 특성들이 선언되어 있다. 이를 추가적인 커스텀화를 위한 출발점으로 삼으면 된다.