我有一个MonoTouch应用程序,当我为设备编译它时,我收到以下错误:
Error MT2002: Can not resolve reference: System.Boolean System.Type::op_Equality(System.Type,System.Type) (MT2002)
它在模拟器中工作正常,但偶尔我会得到一个类型相同的MissingMethodException
。
我没有第三方图书馆。所有的代码都是我自己的。有什么想法吗?
编辑以下是我的3个项目及其所有参考资料。
项目1:Mobile.Libraries
项目2:Mobile.Core
项目3:Mobile.IOS
答案 0 :(得分:1)
喜欢@ Jonathan.Peppers说当你使用针对完整的.NET4配置文件构建的编译的 .dll时会发生这种情况。
MonoTouch基类库(BCM)提供了Silverlight配置文件(2.1)的超集,增加了4.0。因此,从另一个框架添加预编译的二进制文件可能需要在MonoTouch BCL中存在不的某些类型/方法。
解决方案是针对MonoTouch附带的BCL程序集重建所有.dll。这将确保编译器仅使用可用的符号。
为什么它可以在iOS模拟器上运行?
那是因为使用了JIT。由于它是及时编译的,因此可能永远不会到达缺失的符号,因此可以工作,直到您找到丢失的代码(并获得运行时错误)。
另一方面,当您使用设备(或链接器)时,将加载所有符号(并为AOT编译)。任何遗漏都将提前找到,因此您会收到类似上面的构建时错误。