저는 애플리케이션을 구축하기 위해 MEF를 사용하여 플러그인 시스템을 만듭니다. 각 플러그인은 자체 의존성 (참조)을 가지고 빌드되며 결국 응용 프로그램이 인식하고 플러그인을 찾는 지정된 폴더에 복사됩니다. 복사는 빌드 후 스크립트 btw로 수행됩니다.MEF - 플러그인 및 참조 된 어셈블리
문제는 동일한 어셈블리의 다른 버전을 참조 할 수있는 별도의 플러그인이 있다는 것입니다. 이를 위해 우리는 모든 플러그인이 플러그인 폴더 내에 자체 폴더를 만들도록해야한다는 생각을 가지고있어서 어셈블리가 서로 무시하지 못하게합니다. 그러나 AppDomain이 플러그인에서 필요로하는 참조를 찾지 못하기 때문에 예외가 발생합니다. 우리는 경로를 프로빙으로 제공 할 수 있음을 발견했습니다. 하지만 app.config에 모든 플러그인을 등록해야한다는 의미입니다. 그리고 우리는 이것을 좀 더 일반적인 방법으로하려고했습니다.
응용 프로그램이 웹 응용 프로그램이 아닙니다. 서버 역할을하는 콘솔 응용 프로그램이며이를 쉘이라고 부릅니다. 어셈블리는 셸에서 알 수 없지만 셸의 플러그 인에서만 알 수 있습니다. 이 플러그인은 쉘에 알려지지 않았지만 MEF에 의해 발견되었습니다. 셸과 플러그인을 함께 붙이는 유일한 방법은 인터페이스입니다.
저는이 항목에 정말로 집착하고 있으며 문제를 해결할 수있는 도움을 주시면 고맙겠습니다. 이것은 오히려 .Net 프레임 워크 질문보다는 MEF 하나,하지만 나는 상황의 스케치 줄 줄 알았는데.
'BuildManager.AddReferencedAssembly' 메소드와'PreApplicationStartMethodAttribute'를보세요. 도움을 받으면 수명주기 초기에 응용 프로그램의 참조 된 어셈블리 집합에 어셈블리를 추가 할 수 있습니다. 다른 플러그인이 동일한 어셈블리의 다른 버전을 참조 할 때 도움이되는지 확신 할 수 없습니다. –
답장을 보내 주셔서 감사합니다. 응용 프로그램이 웹 응용 프로그램이 아닙니다. 서버 역할을하는 콘솔 응용 프로그램이며이를 쉘이라고 부릅니다. 어셈블리는 셸에서 알 수 없지만 셸의 플러그 인에서만 알 수 있습니다. 이 플러그인은 쉘에 알려지지 않았지만 MEF에 의해 발견되었습니다. 셸과 플러그인을 함께 붙이는 유일한 방법은 인터페이스입니다. – Bosken85