【问题标题】:MissingMethodException when accessing portable library class in Windows Phone 7在 Windows Phone 7 中访问可移植库类时出现 MissingMethodException
【发布时间】:2014-05-23 20:09:53
【问题描述】:

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    public IMyInterface<in TClass>
    {
      void DoSomething(TClass value);
    }
    
    public MyClass : IMyInterface<MyClass>
    {
      // not important
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多