0

我有一个具有以下结构的项目:

  1. WP7客户端(参考文献2)
  2. 便携式图书馆(共享)
  3. WCF 服务(参考文献 2)

广告 1) 客户端还包含对服务 (3) 的服务引用,其类型从 (2) 中重用。广告 2) 库包含服务和客户端使用的
数据协定 ( )。DataContract

到目前为止,一切都很好。一切都在 WVGA 512 MB 模拟器上完美运行。但是当我在真实设备或模拟器 7.1 上运行它时。它MissingMethodException在构造一个类(uknown 类)时抛出了某个地方。

我能够(经过数小时的评论)将其缩小到图书馆中的合同(2)。每当代码触及可移植库中的任何类时,都会引发此异常。客户端 (1) 包含参考(复制本地 == true)。不知道我还能做什么。

客户端是WP7.1,可移植库是.NET4+/SL4+/WP7+,服务是.NET 4.5。

为什么会发生这种情况,如何在真实设备(和/或模拟器 7.1)上的 WP7 中使用可移植库中的类。

更新:我已将数据合同移至客户 (1) 项目。但是当它们被访问时,仍然会抛出相同的异常TargetInvocationException(带有 inner MissingMethodException)。我很困惑。我现在怀疑DataContract属性。

更新 2:它也不DataContract是属性。这些类是从抽象泛型类派生的。KnownType如果有帮助,我会尝试用属性标记它。

更新 3:所以它是基类。我删除了它的通用组件,但仍然无法正常工作。所以我完全剥离了基类,它现在可以工作了。但为什么它不起作用?它适用于服务,适用于 WVGA 模拟器,为什么不适用于设备?我尝试KnownType使用基类,甚至是子类。没有任何效果。

4

1 回答 1

1

对于任何可能会出现这种奇怪行为的人。它是由协方差和逆变指标引起的。我有这种情况:

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

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

它实际上是由in(逆变)或out(协变)引起的。谢谢,微软。当我删除这些时,突然之间没有问题了,以前应用程序根本没有启动。

于 2014-05-24T00:02:22.300 回答