어셈블리 (CLI)

최근 버전의 윈도우에서 마이크로소프트공통 언어 기반(CLI)에 정의한 어셈블리(assembly)는 디플로이, 버전 지정, 보안을 위해 사용되는 컴파일된 코드 라이브러리이다. 두 종류가 있다: 프로세스 어셈블리(EXE), 라이브러리 어셈블리(DLL). 프로세스 어셈블리는 라이브러리 어셈블리에 정의되는 클래스를 사용하는 프로세스를 대표한다. CLI 어셈블리는 CIL에 코드를 포함하고 있으며 보통은 CLI 언어로부터 생성된 뒤 JIT 컴파일러에 의해 런타임기계어로 컴파일된다. 닷넷 프레임워크 구현체에서 이 컴파일러는 공통 언어 런타임(CLR)의 일부이다.

어셈블리는 하나 이상의 파일로 구성될 수 있다. 코드 파일은 모듈(module)이라고 부른다. 어셈블리는 하나 이상의 코드 모듈을 포함할 수 있다. 코드 모듈을 생성하기 위해 각기 다른 언어를 사용할 수 있으므로 기술적으로 각기 다른 언어들을 사용하여 어셈블리를 만들 수 있다. 그러나 비주얼 스튜디오는 한 어셈블리에 각기 다른 언어를 사용하는 것을 지원하지 않는다.

어셈블리 버전

[편집]

CLI 어셈블리는 버전 정보를 포함할 수 있으므로 공유 어셈블리들에 의해 발생되는 응용 프로그램 간 대부분의 충돌을 제거할 수 있다.[1] 그러나 어셈블리 간 잠재적인 모든 버전 충돌을 제거하지는 못한다.[2]

어셈블리의 언어

[편집]

어셈블리는 중간 언어인 CIL 코드로 빌드된다. 프레임워크는 내부적으로 CIL [bytecode]를 네이티브 어셈블리 코드로 변환한다. "Hello World"를 출력하는 프로그램이 있다면 그에 상응하는 CIL 코드는 다음과 같다:

 .method private hidebysig static void  Main(string[] args) cil managed {
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
  // Code size       11 (0xb)
  .maxstack  1
  IL_0000:  ldstr      "Hello World"
  IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000a:  ret } // end of method Class1::Main

CIL 코드는 String을 스택으로 적재한 뒤 WriteLine 함수를 호출하고 반환한다.

각주

[편집]
  1. Truche, Philippe (2008년 8월 12일). “.NET Assembly Versioning Lifecycle”. 2008년 10월 24일에 원본 문서에서 보존된 문서. 2008년 9월 21일에 확인함. 
  2. Pierson, Harry (2008년 9월 17일). “DLR Namespace Change Fire Drill”. 2008년 11월 1일에 원본 문서에서 보존된 문서. 2008년 9월 21일에 확인함.