我有一个具有以下结构的项目:
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
放在基类上,甚至在子类上也是如此。什么都行不通。
答案 0 :(得分:1)
对于任何可能会得到这种奇怪行为的人。它是由协方差和逆变指标引起的。我有这种情况:
public IMyInterface<in TClass>
{
void DoSomething(TClass value);
}
public MyClass : IMyInterface<MyClass>
{
// not important
}
它实际上是由 in (逆变)或 out (协变)引起的。谢谢,微软。当我删除它们时,突然之间没有问题,应用程序之前根本没有启动。