在Windows Phone 7中访问可移植库类时出现MissingMethodException

时间:2014-05-23 20:09:53

标签: c# wcf windows-phone-7 portable-class-library missingmethodexception

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

  1. WP7客户端(参考文献2)
  2. 便携式图书馆(共享)
  3. WCF服务(参考文献2)
  4. ad 1)客户端还包含对service(3)的服务引用,其中类型从(2)重用 ad 2)库包含服务和客户使用的数据合同(DataContract)。

    到目前为止一切顺利。所有功能都完美适用于WVGA 512 MB仿真器。但是当我在真实设备或模拟器7.1上运行它时。它在构造类(未知类)的某处抛出MissingMethodException

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

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

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

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

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

    更新3 :所以它是基类。我删除了它的通用组件,但仍然无效。所以我完全剥离了基类,它现在起作用了。 但为什么它不起作用?它适用于服务,它适用于WVGA仿真器,为什么不用于设备?我尝试将KnownType放在基类上,甚至在子类上也是如此。什么都行不通。

1 个答案:

答案 0 :(得分:1)

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

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

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

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