물리적으로 여러 .cs 파일로 코딩 된 단일 파일 어셈블리와 여러 개의 .NetModules가 포함 된 다중 파일 어셈블리를 갖는 것의 차이점은 무엇입니까 ??다중 파일 어셈블리
제 교수는 이러한 어셈블리가로드되거나 지팅 중일 때 차이가 실현 될 수 있다고 말합니다. 다중 파일 어셈블리의 모든 .Netmodule이 한 번에로드됩니다. 그러나 그는 확신하지 못합니다. 아무도 나를 분명히 할 수 있을까?
물리적으로 여러 .cs 파일로 코딩 된 단일 파일 어셈블리와 여러 개의 .NetModules가 포함 된 다중 파일 어셈블리를 갖는 것의 차이점은 무엇입니까 ??다중 파일 어셈블리
제 교수는 이러한 어셈블리가로드되거나 지팅 중일 때 차이가 실현 될 수 있다고 말합니다. 다중 파일 어셈블리의 모든 .Netmodule이 한 번에로드됩니다. 그러나 그는 확신하지 못합니다. 아무도 나를 분명히 할 수 있을까?
는 우리가 거의 사용되지 않는 유형의 자주이 줄은 RUT.netmodule를 만들 수있는 C# 컴파일러가 발생 유형
이제 csc /t:module RUT.cs
을 사용 포함
FUT.cs
를 포함
RUT.cs
라는 두 .cs 파일을 가지고 있다고 가정하자 파일. 이 파일은 표준 DLL PE 파일이지만 자체적으로 CLR은 파일을로드 할 수 없습니다.
다음은 자주 사용하는 유형을 자체 모듈로 컴파일 해 봅시다. 형식이 자주 사용되기 때문에이 모듈 을 어셈블리 매니페스트의 골키퍼로 설정합니다. 사실, 때문에이 모듈이 이제 전체 어셈블리를 나타냅니다, 내가 그것을 호출하는 대신 JeffTypes.dll에 출력 파일의 이름을 변경합니다은 FUT.dll :
csc /out:JeffTypes.dll /t:library /addmodule:RUT.netmodule FUT.cs
이 줄은 C 번호를 알려줍니다 컴파일러를 사용하여 FUT.cs 파일을 컴파일하여 JeffTypes.dll 파일을 생성합니다. /t : library가 지정되었으므로 매니페스트 메타 데이터 테이블이 포함 된 DLL PE 파일은 이며 JeffTypes.dll 파일로 방출됩니다. /addmodule:RUT.netmodule 스위치는 컴파일러에 에게 RUT.netmodule이 어셈블리의 일부로 간주되어야하는 파일임을 알립니다. 특히 /addmodule 스위치는 파일을 FileDef 매니페스트 메타 데이터 테이블 에 추가하고 ExportedTypesDef 매니페스트 메타 데이터 테이블에 RUT.net 모듈의 공개적으로 내 보낸 데이터 형식을 추가하도록 컴파일러에 지시합니다.
RUT.net 모듈 파일에는 RUT.c를 컴파일하여 생성 된 IL 코드가 들어 있습니다. 이 파일에도 에는 유형, 메소드, 필드, 속성, 이벤트 등을 설명하는 메타 데이터 테이블이 포함되어 있으므로 은 RUT.cs.x에 정의되어 있습니다. 메타 데이터 테이블은 유형, 메소드 및 등도 설명하며 RUT.c가 참조합니다. JeffTypes.dll은 별도의 파일입니다. RUT.net 모듈과 마찬가지로 이 파일에는 FUT.cs를 컴파일하여 생성 된 IL 코드가 포함되어 있으며 비슷한 정의 인 과 참조 메타 데이터 테이블이 포함되어 있습니다. 그러나 JeffTypes.dll에는 추가 매니페스트 메타 데이터 테이블이 포함되어있어 JeffTypes.dll을 어셈블리로 만듭니다. 추가 매니페스트 메타 데이터 테이블 은 어셈블리를 구성하는 모든 파일 (JeffTypes.dll 파일 자체 및 RUT.net 모듈 파일)을 설명합니다. 매니페스트 메타 데이터 테이블도 포함 JeffTypes.dll 및 RUT.netmodule
에서 내 보낸 public 형식 의 모든 CLR은 메서드가 매개 변수, 반환 값 또는 로컬 변수로 참조하는 형식을 검색합니다. 그런 다음 CLR은 매니페스트가 포함 된 참조 된 어셈블리의 파일을로드하려고 시도합니다.액세스되는 유형이이 파일에있는 경우 CLR은 유형을 사용할 수있게 허용하는 내부 부기를 수행합니다. 매니페스트가 참조 된 형식이 다른 파일에 있음을 나타내면 CLR은 필요한 파일을로드하고 내부 부기를 수행하며 은 형식에 액세스 할 수 있습니다. CLR은 언로드 된 어셈블리에서 형식을 참조하는 메서드가 호출 될 때만 어셈블리 파일을로드합니다.
이것은 응용 프로그램을 실행하기 위해 참조 된 어셈블리의 모든 파일 이 존재하지 않아도된다는 것을 의미합니다.
그래서 덜 사용되는 소스 클래스는 NetModules 컴파일 될 수 있고 성능을 강화, 필요한 경우로드 및 이하의 DLL 파일이 변경 관리 및 배포 과정를 쉽게 크기.
이미지jeffrey richter