-
COM에 대하여
-
이미 사용중인 검증된 코드의 재사용을 위해 COM 활용
-
서로 다른 언어로 작성된 바이너리의 타입을 공유하기 위한 방법으로 COM 서버 생성
-
버전관리의 문제
-
Client에서 COM 서버를 호출할 때 COM 서버의 버전을 확인할 방법이 제공되지 않는다.
-
때문에 새로운 버전의 COM 서버를 설치하면 타입라이브러리를 새로 수정하고, 레지스트리를 업데이트하며, 상황에 따라 Client의 코드를 수정하는 상황도 발생(DLL 지옥)
-
-
배포의 문제
-
COM 서버의 정보를 레지스트리에 등록하는 과정은 어렵지 않다.
-
하지만 COM 서버의 위치나 이름이 바뀌게 되면, 레지스트리 변경이 쉽지 않게 된다. 이 경우 이 COM 서버를 접근하는 Client의 구성정보를 모두 변경해야 한다.
-
-
-
어셈블리(Assembly) 특징
-
DLL 지옥의 탈출
-
같은 COM DLL에 대한 서로 다른 버전을 동시 제공 가능
-
Client가 원하는 버전을 파악하여 해당 버전의 COM DLL을 정확히 로드
-
-
레지스트리에 등록하지 않음
-
어셈블리는 레지스트리 등록 대신 Assembly 내에 자신에 대한 메타데이터를 포함하게 된다.
-
배포는 해당 파일을 원하는 위치에 복사하는 것으로 끝남.
-
-
COM 처럼 dll과 exe의 형태
-
배포의 단위로써 코드 재사용 및 버전 관리를 가능하게 하는 단위
-
class 접근제한자인 internal의 허용 단위
-
-
Assembly Architecture
-
하나의 assembly는 다중 모듈로 구성
-
모듈(module)이란 유효한 파일의 이름으로 소스코드 파일이나 리소스(예 : 이미지 파일)
-
-
일반적인 어셈블리는 네 가지 요소로 구성
-
단일 파일 어셈블리
-
assembly metadata
-
type metadata
-
MSIL 파일
-
리소스
-
-
다중 파일 어셈블리
-
자주 사용되지 않는 유틸리티 코드를 다른 모듈(별도의 소스파일)로 분리
-
size가 큰 리소스를 분리
-
.NET Framework에서는 파일이 참조될 때만 다운로드 하므로 이처럼 자주 참조되지 않는 코드와 리소스를 다중파일 어셈블리로 분리하여 구성하면 코드를 최적화 시키는 것이 가능
-
-
-
어셈블리 매니페스트(Assembly Manifast)
-
Assembly의 핵심요소
-
어셈블리 참조에 필요한 모든 정보를 내장
-
ID : 이름, 버전, 컬처, 공개 키
-
파일목록 : 하나의 어셈블리는 하나 이상의 파일로 구성
-
참조된 어셈블리 목록 : 외부에서 참조되는 어셈블리에 대한 정보
-
Permission 정보 : 이 어셈블리를 실행하기 위해 필요한 권한 정보
-
형식 참조 정보 : reference와 그 reference의 선언/구현 사항이 포함된 파일을 매핑하는 정보
-
-
-
매니페스트의 저장 방법
-
단일 파일 어셈블리에서는 어셈블리를 구성하는 파일에 포함
-
다중 파일 어셈블리에서는 별도의 독립실행형 매니페스트를 구성하거나 어셈블리를 구성하는 하나의 dll에 저장될 수 있다.
-
-
단일 파일 어셈블리 만들기
-
어셈블리 매니페스트, 형식 정보, 구현 코드 등의 하나의 파일로 구성된다.
-
생성
-
csc MyCode.cs // MyCode.cs 모듈에 대한 어셈블리(MyCode.exe) 생성
-
출력 파일명 지정
csc /out:MyAssembly.exe MyCode.cs
-
라이브러리 생성
csc /out:MyCodeLibrary.dll /t:library MyCode.cs
-
공유 어셈블리와 전용 어셈블리
-
공유 어셈블리(shared assembly)
-
재사용 가능한 코드에 대한 어셈블리의 생성(COM의 dll, exe처럼)
-
SN(Strong Name)을 가지고 있어야 한다.(sn.exe)
-
버전 정보를 포함하고 있어야 한다.
-
-
GAC(Global Assembly Cache)에 등록해야 한다.(gacutil.exe)
-
-
전용 어셈블리(private aseembly)
-
응용 프로그램과 동일한 디렉토리 또는 서브 디렉토리에 존재
-
버전관리나 클래스 이름 충돌의 문제가 없음
-
특정 응용 프로그램에 종속적인 어셈블리를 구성할 때 사용
-
-
-
어셈블리 정보 확인
-
Intermediate Language Disassembler Utility
-
ILDasm.exe
-
GUI를 통해 .NET assembly(EXE 혹은 DL)의 정보를 확인할 수 있다.
-
-
-
버전 관리
-
소스 코드 내에서 직접 입력 가능
-
[assembly:AssemblyVersion("1.0.1.0")]
-
주버전.부버전.수정버전.빌드번호
-
수정버전과 빌드번호는 *로 생략가능
-
-
[assembly:AssemblyVersion("1.0.*")]
-
공유 어셈블리의 경우 버전이 다를 경우 함께 사용할 수 있다(서로 버전의 library를 함께 서비스 할 수 있다.)
-
[첨부 파일 : 소스 파일]
출처 : (주)인터데브 솔루션 개발 사업부 박준호님의 C# 동영상 강좌
'프로그램&DB > C#' 카테고리의 다른 글
[C# 기사풀이] 라면 만들기 강좌 후편 - 데브피아 C#마을 유경문 (lazykoder)씨의 글 (0) | 2009.04.20 |
---|---|
박준호님의 C# 강좌 - Assembly 2 (다중 파일 Assembly) (0) | 2009.04.14 |
박준호님의 C# 강좌 - Preprocessor Directive(전처리기 지시문) (0) | 2009.04.14 |
박준호님의 C# 강좌 - C# 객체 소멸과 Garbage Collection (0) | 2009.04.14 |
박준호님의 C# 강좌 - Exception(예외 처리) (0) | 2009.04.14 |