2009-04-01 5 views
0

나는이 분명하지 드문 문제로 실행했습니다 - 내가 조립 A.의 인터페이스를어떻게 서로 다른 어셈블리의 객체를 서로에 캐스트 할 수 있습니까?

  1. 동적으로 어셈블리 B를 로딩하고로에서 개체를 캐스팅하려고 Assembly A의 인터페이스.

  2. InvalidCastException으로 실패했습니다.

나는 이유를 이해 왔어요 - 어셈블리의 클래스와도 같은 이름과 동일한 코드와 어셈블리 B의 클래스가, 같은 것이 아니다 서로 캐스트 할 수없는 .

제 질문은 : 해결책이 있습니까? 두 가지 유형을 호환 가능하게 만들 수있는 방법이 있습니까? 아니면 어셈블리 B에서 인터페이스를 복제하여 객체를 캐스팅해야합니까?

어셈블리 B를 Assembly.LoadFrom으로로드 중입니다. 형식을 호환 가능하게하는 다른 방법이 있습니까?

나는이 문제가있는 사람이 될 수 없습니다. 내가하려는 것은 플러그인 아키텍처에서 상당히 일반적인 작업처럼 보일 것입니다.

답변

6

복제가 답이 아닙니다. 어셈블리 B가 아마도 어셈블리 A를 참조하고 거기에서 인터페이스 (또는 무엇이든)를 소비 할 수 있습니까?

그렇지 않으면 어셈블리 A와 어셈블리 B가 참조하는 독립 실행 형 DLL에서 인터페이스 (또는 무엇이든)를 선언하십시오. 그러면 인터페이스의 버전은 1 개뿐입니다. 모든 것이 작동합니다.

당신은 확실히 다른의 형식에 하나의 어셈블리의 형식에서 캐스팅 할 수
+0

그게 내가해야 할 일이다 .. – RobS

2

- 그렇지 않으면 우리가 나는 문제가 인터페이스가 별도로로드되었는지 의심 object :

에서 쫓겨 수 없었다 - 난 것으로 의심 귀하의 어셈블리 B는 어셈블리 을 다시 (아마도 어딘가에서?)로드했습니다.

파일 레이아웃은 어떻게됩니까? 어셈블리 B를 다른 디렉토리에서로드하고 있고 그 디렉토리에 어셈블리 A 사본이 있다면, 거기에서로드 중일 수 있습니다. 어셈블리로드 및 바인딩은 까다로운 비즈니스입니다. 나는 "C#을 통해 CLR"을 잡아서 매우 신중하게 그 장을 읽고, 그리고/또는 turning on Fusion logging 무슨 일이 일어나고 있는지 확인하는 것이 좋습니다.

는 (I 어셈블리의 유형 B는 정말 이 아닌 경우, 즉 그것을 설명 할 것인가? 그런데, 조립체 (A)의 인터페이스를 구현 않습니다 있으리라 믿고있어!)

내가 역할을하는 fairly old article이 그건 그렇고, 일종의 튜토리얼. 도움이 될 수 있습니다.

관련 문제