0

나는 다음과 같은 구조를 가지고있는 프로젝트가 있습니다MissingMethodException이 7

  1. WP7 클라이언트 (공유) (참고 문헌 2)
  2. 휴대용 라이브러리
  3. WCF 서비스 (참조 2)

광고 1) 클라이언트는 (2)에서 재사용 한 유형의 service (3)에 대한 서비스 참조도 포함합니다.
광고 2) 라이브러리에는 서비스와 클라이언트가 모두 사용하는 데이터 계약 (DataContract)이 포함되어 있습니다.

지금까지 그렇게 좋았습니다. 모두 WVGA 512MB 에뮬레이터에서 완벽하게 작동합니다. 하지만 실제 장치 나 에뮬레이터에서 실행할 때 7.1. 그것은 MissingMethodException 어딘가에 클래스 (알 수있는 클래스)를 생성합니다.

도서관 (2)의 계약서에 (주석 달린 후) 그것을 좁힐 수있었습니다. 코드가 이식 가능한 라이브러리의 클래스에 닿으면이 예외가 throw됩니다. client (1)은 참조를 포함합니다 (copy local == true). 내가 뭘 할 수 있는지 모르겠다.

클라이언트는 WP7.1이고 이식 가능한 라이브러리는 .NET4 +/SL4 +/WP7 +이며 서비스는 .NET 4.5입니다.

실제 장치 (및/또는 에뮬레이터 7.1)에서 WP7 내에서 휴대용 라이브러리의 클래스를 사용하는 이유는 무엇일까요?

업데이트 : 데이터 계약을 클라이언트 (1) 프로젝트로 옮겼습니다. 그러나 액세스 할 때 여전히 동일한 예외 (MissingMethodException 포함) TargetInvocationException이 발생합니다. 나는 당혹 스럽다. 나는 이제 DataContract 속성을 의심합니다.

업데이트 2 : 역시 DataContract 속성이 아닙니다. 클래스는 추상 제네릭 클래스에서 파생됩니다. 도움이된다면 KnownType 속성으로 표시해 보겠습니다.

업데이트 3 : 기본 클래스입니다. 나는 그것의 일반적인 구성 요소를 제거하고, 여전히 작동하지 않습니다. 그래서 나는 기본 수업을 모두 없애 버렸고 지금은 효과가 있습니다. 하지만 왜 작동하지 않습니까? 그것은 서비스를 위해 작동합니다, 그것은 WVGA 에뮬레이터에서 작동합니다, 왜 장치가 아닌가? 서브 클래스에도 기본 클래스 인 KnownType을 넣으려고했습니다. 아무것도 작동하지 않습니다.

답변

1

이상한 행동을하는 사람들에게. 그것은 공분산 및 반물질 지표로 인해 발생했습니다. (공변) 밖으로

public IMyInterface<in TClass> 
{ 
    void DoSomething(TClass value); 
} 

public MyClass : IMyInterface<MyClass> 
{ 
    // not important 
} 

그것은 문자 그대로 (contravariant)에 에 의한, 또는 :이 상황이있다. 고마워, 마이크로 소프트. 내가 이것들을 제거했을 때, 갑자기 응용 프로그램이 전혀 시작되지 않았던 문제가 없었습니다.