문제

나는 메인 앱이 새로운 appdomain 's에서 런타임에 어셈블리 addin1.dll 및 addin2.dll을로드하는 addin 시스템을하고 있습니다.

그러나 addin1.dll이 내 키와 addin2.dll에 서명 (강한 이름)에 서명 된 경우 addin1.dll 만로드하고 addin2.dll을 거부 할 수 있기를 원합니다.

AppDomainsEtup에서 일부 매개 변수를 설정하여 수행해야한다고 생각합니다.

도움이 되었습니까?

해결책

살펴보십시오 어셈블리 .LOAD 증거 매개 변수를 취하는 메소드. 공개 키에서 증거를 만드는 방법의 예를 찾을 수 있습니다. 여기.

다른 팁

DomainManager를 구현하고 원하는대로로드/블록 결정을 기반으로 할 수 있습니다. 나는 다소 관련된 질문에 대답했다 여기.

당신이 사용할 수있는 AppDomain 클래스의로드 방법 클라이언트 또는 최종 사용자 환경에 의해 어셈블리의 게시자 정책을 만족시키는 경우 새 어셈블리를 AppDomain에로드하기 위해.

또한 강력한 이름의 어셈블리는 어셈블리와 CLR의 출판사가 제시 한 모든 규칙을 따릅니다. 따라서 어셈블리 사용자는 AppDomain에로드되는 어셈블리의 보안 측면을 만족시켜야합니다.

CLR은 강력한 이름 속성을 사용하여 GAC에서 참조 된 글로벌 어셈블리를로드합니다. 참조 된 어셈블리가 GAC에서 사용할 수있는 경우 CLR은 포함 된 하위 디렉토리를 반환하고 매니페스트를 고정하는 파일에로드됩니다. 어셈블리를 찾으면 런타임에로드 된 어셈블리가 코드를 구성한 어셈블리를 구축 한 동일한 게시자에서 발신자가 발신자에게 보장합니다. 이제 참조 어셈블리의 어셈블리 레프 테이블에서 공개 키 토큰을 비교하고 참조 된 어셈블리의 어셈블리 테이블에서 공개 키 토큰을 비교합니다. 참조 된 어셈블리가 GAC에 있지 않은 경우 CLR은 응용 프로그램의 기본 디렉토리를보고 응용 프로그램의 구성 파일에서 식별 된 개인 경로에서 보입니다. 어셈블리가 포함 된 응용 프로그램이 MSI를 사용하여 설치되면 CLR은 MSI를 호출하여 필요한 어셈블리를로드합니다. 이 위치에서 어셈블리가 발견되지 않으면 예외가 발생하고 결국 어셈블리의 바인딩이 실패합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top