어셈블리의 이점

업데이트: 2007년 11월

어셈블리는 응용 프로그램 배포를 단순화하고 구성 요소 기반 응용 프로그램에서 발생할 수 있는 버전 문제를 해결하기 위해 디자인되었습니다.

최종 사용자나 개발자에게는 오늘날의 구성 요소 기반 시스템에서 발생하는 버전 관리 문제나 배포 문제가 흔한 일입니다. 경우에 따라서는 컴퓨터에 새 응용 프로그램을 설치했을 때 기존 응용 프로그램이 갑자기 작동하지 않기도 합니다. 또한 개발자들은 COM 클래스를 활성화하는 데 필요한 모든 레지스트리 항목을 일관되게 유지하는 작업에 수많은 시간을 보내 왔습니다.

.NET Framework에서는 어셈블리의 사용함으로써 많은 배포 문제가 해결되었습니다. 어셈블리는 자체 설명되고 레지스트리 항목에 종속되지 않는 구성 요소이기 때문에 다른 응용 프로그램에 전혀 영향을 주지 않고 설치하는 것을 가능하게 합니다. 이러한 특징으로 응용 프로그램 제거 및 복제 작업도 단순화할 수 있습니다.

버전 관리 문제

현재 Win32 응용 프로그램에는 두 가지 버전 관리 문제가 있습니다.

  • 버전 관리 규칙은 응용 프로그램을 이루는 구성 요소 간에 통신하거나 운영 체제에서 일괄적으로 적용될 수 없습니다. 현재 방식은 이전 버전과의 호환성에 기반하는데, 이러한 호환성을 유지하는 것이 쉽지 않습니다. 일단 게시된 인터페이스 정의는 정적이어야 하고 특정 코드는 이전 버전과 호환 가능해야 합니다. 또한, 일반적으로 코드는 특정 코드의 단일 버전만이 컴퓨터에 존재하고 실행되도록 디자인됩니다.

  • 함께 빌드된 구성 요소 집합과 런타임에 존재하는 집합 사이의 일관성을 유지할 수 없습니다.

이 두 가지 버전 관리 문제로 인해 DLL 충돌이 발생하는데, 하나의 응용 프로그램을 설치할 때 이전 버전과 호환되지 않는 특정 소프트웨어의 구성 요소 또는 DLL이 함께 설치되면 기존 응용 프로그램을 사용할 수 없게 됩니다. 이러한 문제가 발생하면 시스템 자체에서는 문제를 진단하거나 고치지 못합니다.

DLL 충돌 문제 해결

이러한 문제를 해결하기 위한 연구를 통해 Microsoft® Windows® 2000에는 DLL 충돌을 부분적으로 수정하는 기능이 제공됩니다.

  • Windows 2000에서는 클라이언트 응용 프로그램을 만들 때 종속 .dll 파일이 응용 프로그램의 .exe 파일이 들어 있는 디렉터리에 위치하도록 할 수 있습니다. 또한 특정 구성 요소를 검색할 때, 정규화된 경로나 일반 경로에서 검색하기 전에 .exe 파일이 들어 있는 디렉터리에서 구성 요소를 먼저 검색하도록 구성할 수 있습니다. 이렇게 하면 다른 응용 프로그램에서 설치하고 사용하는 구성 요소와는 독립적으로 새 구성 요소를 사용할 수 있습니다.

  • Windows 2000에서는 운영 체제와 함께 제공된 파일을 System32 디렉터리에 따로 잠금으로써 다른 응용 프로그램을 설치할 때 실수로 이들 파일이 바뀌는 것을 방지합니다.

공용 언어 런타임에서는 어셈블리를 사용하여 DLL 충돌을 완전하게 해결할 수 있는 방법을 찾고 있습니다.

어셈블리 해결책

버전 관리 문제를 비롯하여 DLL 충돌을 일으키는 문제를 해결하기 위해 런타임에서는 어셈블리를 사용하여 다음을 수행합니다.

  • 서로 다른 소프트웨어 구성 요소에 대해 개발자가 버전 규칙을 지정할 수 있도록 합니다.

  • 버전 관리 규칙을 적용할 수 있는 인프라를 제공합니다.

  • 특정 구성 요소의 여러 버전을 동시에 실행(side-by-side 실행)할 수 있는 인프라를 제공합니다.

참고 항목

개념

어셈블리 버전 관리

어셈블리 및 Side-by-Side 실행

기타 리소스

공용 언어 런타임의 어셈블리