문제의 핵심은 어떻게 해야 다른 응용프로그램의 기능을 망가뜨리지 않으면서 버그를 수정하고 새로운 기능을 파일에 추가할 수 있는지에 대한 것이다.
두 가지 어셈블리, 두 가지 배포 방법
CLR은 약한 이름의 어셈블리(Weakly Named Assembly)와 강력한 이름의 어셈블리(Strongly Named Assembly)라는 두 종류의 어셈블리를 지원한다.
PE 파일 타입, PE32 또는 PE32+ 헤더, CLR 헤더, 메타데이터, 매니페스트 테이블, IL 코드까지 완벽하게 동일하다. 그리고 C# 컴파일러와 AL.EXE 유틸리티를 사용하여 어셈블리를 만드는 것까지도 동일하다.
강력한 이름의 어셈블리는 게시자의 공개 키(Public Key)와 개인 키(Private Key) 한 쌍을 이용하여 어셈블리 게시자를 식별할 수 있도록 서명하였다는 것이다. 이 키 쌍을 통해 어셈블리가 고유하게 식별되고, 안정하게 유지되며, 버전 관리를 할 수 있고, 어셈블리가 사용자 컴퓨터 어디든 심지어 인터넷상에도 자유롭게 배포될 수 있도록 해준다.
어셈블리를 고유하게 식별할 수 있도록 해주는 기능은 CLR이 안전하다고 알려진 일부 정책들(know-to-be-safe-policies)을 응용프로그램이 강력한 이름의 어셈블리에 바인딩할 때 강제로 적용할 수 있개 해준다.
어셈블리는 두 가지 형태로 배포될 수 있는데, 개별적으로(Privately) 또는 전역으로(Globally) 배포될 수 있다.
개별적으로 배포되는 어셈블리는 응용프로그램의 기본 디렉터리나 그 아래의 디렉터리에 배포되는 것을 말한다. 약한 이름의 어셈블리만이 이와 같이 배포될 수 있다.
전역으로 배포되는 어셈블리는 잘 알려진 위치에 배포되어 CLR이 어셈블리를 쉽게 찾을 수 있도록 해준다. 강력한 이름의 어셈블리는 개별적으로도 그리고 전역으로도 배포할 수 있다.
Uploaded by Notion2Tistory v1.1.0