2013-10-02 6 views
2

두 개의 다른 위치에서 동일한 종속 DLL을로드하는 제공된 DLL을 사용하려고합니다.다른 위치의 동일한 어셈블리에서로드 된 개체 간의 캐스트 예외

배포자 배포에서 두 위치는 자살하지만 내 것은 아닙니다.

코드는 I 클래스 캐스트 예외가 실행됩니다

Unable to cast [A]Type to [B]Type 

오류는 동일한에 유래 질문 Different location of assemblies stoped the type casting의 영업 이익이 발생입니다.

두 유형은 DLL의 두 위치에서로드 된 유형 (두 개의 디렉토리에 복사 된 동일한 실제 파일)입니다.

더블 DLL의 서명에 Strong Name을 사용하려고했지만 작동하지 않았습니다.

두 형식을 같은 형식으로 처리하도록 CLR에 알릴 수있는 방법이 있습니까?

+1

같은 위치에서 DLL을로드 할 수 있습니까? –

답변

1

저는 이것이 많은 이유 때문에 허용되지 않는다고 확신합니다.

먼저 두 어셈블리가 있다고 가정 해 보겠습니다. 첫번째는 Animal을 정의하고 Dog이라는 자손을가집니다. 두 번째는 Animal을 정의합니다. 두 어셈블리 모두 동일한 네임 스페이스를 사용합니다.

런타임 중에 var B = new Dog();을 선언하면 어떻게 될까요? 코드가 두 번째 어셈블리 버전의 Animal을 스왑하거나하지 않을까요?

var A = new Animal();을 선언하면 어떻게됩니까? IMHO, 코드는 그것을 방지하기 위해 단순히 내파해야합니다.

보안 관점에서 보면 특정 클래스를 스왑하기 위해 라이브러리와 동일한 네임 스페이스를 정의하는 다른 어셈블리에 누군가를 연결하기 만하면 안됩니다.

포인트는 정확하게 동일한 유형을 포함하는 두 개의 물리적 어셈블리에 연결함으로써 해결할 실제 방법이 없다는 큰 문제를 소개합니다. 공급 업체와 동일한 방식으로 코드를 변경하십시오.

+0

당신의 대답은 정확합니다. 나는 이것에 대한 해킹이 있었으면 좋겠다고 생각했지만 기본적으로 그렇지 않은 것이 가장 좋습니다. 내 코드는 구조적으로 공급 업체 코드와 다릅니다. 공급자 코드는 WinForm 응용 프로그램 (exe 및 dll을 모두 한 디렉터리에 저장)에서 작동합니다. Wcf 서비스 (Wcf의 exe와 dll이 같은 디렉토리에 있지 않음)를 게시하기 위해 dll을 사용하려고했습니다. –