2012-08-30 4 views
0

간단한 예.MEF 종속 질문

응용 프로그램 A에는 클래스 라이브러리 C가 있으며이를 통해 사용됩니다.

응용 프로그램 A는 MEF를 사용하여 플러그인 디렉토리에서 P1 및 P2 모듈을 검색하고로드합니다. 플러그인 당 하나의 어셈블리

P1과 P2는 모두 C (클래스 라이브러리)에 종속됩니다.

P1에 의해 사용되는 C의 버전을 확인한다 빌드 프로세스 I는 I 한번에 로딩 동일한 조립체의 다수의 사본을 끝내지 않을 것이라고 가정

A.

의해 참조 된 버전과 동일하다? 기본적으로 나는 A의 애플리케이션 디렉토리뿐만 아니라 Plugin 디렉토리에 C의 복사본을 가지고있다.

답변

1

중복 어셈블리가되지 않도록하려면 플러그인 프로젝트의 Copy Local 속성을 계약 (C) 라이브러리의 false로 변경할 수 있습니다. 빌드시 해당 내용이 출력으로 복사되지 않습니다 예배 규칙서.

Fusion 로더 규칙 덕분에 CLR이 동일한 어셈블리를 두 번로드하지 않아도됩니다. 대상 어셈블리가 이미 AppDomain에로드되어 있는지 먼저 확인해야합니다. 그러나 Assembly.LoadFrom을 사용하는 모든 코드는 어셈블리가 디스크에서 다른 위치를 실제로 찾으면 예외가 발생할 수 있으므로주의해야합니다.

+0

그래, 나는 약간의 연극을 가지고 그것이 어리석은 짓을하지 않을 것이라고 생각한다. 나는 MEF가 어셈블리 로딩 이벤트 중 일부를 오버라이드하고 ... 할 일이 있음을 염려했다. ​​... :) 고마워. – Ian