자체 하위 디렉토리의 플러그인 어셈블리를 처리 할 때 하위 어셈블리에서 해당 종속성을로드하려고하면로드 할 수없는 잘 알려진 문제점이 있습니다. 해결 방법은 초기화시 해당 AppDomainSetup
개체에 PrivateBinPath
이 설정된 AppDomains에 플러그인을로드하는 것입니다. 그러나 이것은 특히 플러그인이 GUI를 제공한다고 가정 할 경우 응용 프로그램 도메인 간 마샬링/교차에 관한 다른 어려움을 유발합니다.플러그인 AppDomains 해결 방법
보안 측면의 우선 순위가 낮 으면 (중요하지 않은 유틸리티 응용 프로그램, 잘못된 플러그인으로 인한 충돌시 심각한 문제 없음) 다음과 같은 생각이 들었습니다. 응용 프로그램 시작시 모든 플러그인 디렉토리를 검색해야합니다 , bin 경로에 해당 디렉터리가있는 새 AppDomain을 만들어야합니다. 그런 다음 전체 응용 프로그램과 해당 GUI가 모든 플러그인과 함께 새 AppDomain에서 실행됩니다.
주어진 상황에서 그 해결책을 피할 이유가 있습니까? 아니면 그 해결책이 심지어 실현 불가능한 이유가있을 수 있습니까?
내가 메인 UI가 플러그인과 같은 응용 프로그램 도메인에서 실행중인 경우라고 생각 , 플러그인이 충돌하면 기본 UI가 손상 될 가능성이 있습니다. 당신은 addin 프레임 워크를 사용하고 있습니까, 아니면 "RYO"입니까? – IAbstract
@IAbstract : 다른 AppDomain에서 실행 중일 때도 플러그인의 크래시가 발생하지 않으면 대개 기본 UI가 충돌합니다. 결국 플러그 인에서 던져진 예외는 AppDomain 경계를 넘어서서 마샬링되고 예외를 처리하지 않으면 기본 응용 프로그램을 종료합니다. 필자의 경우, RYO입니다. Addin Framework를 살펴보고 그것에 대한 많은 기사를 읽었지만 복잡하고 깊이 중첩 된 객체 계층이 아닌 핵심 응용 프로그램과 플러그인 간의 최소한의 인터페이스를 참조했습니다. 전송해야합니다. –