编译时出现MonoTouch错误:System.Boolean System.Type :: op_Equality(System.Type,System.Type)

时间:2012-04-27 03:40:19

标签: c# ios compilation mono xamarin.ios

我有一个MonoTouch应用程序,当我为设备编译它时,我收到以下错误:

Error MT2002: Can not resolve reference: System.Boolean System.Type::op_Equality(System.Type,System.Type) (MT2002)

它在模拟器中工作正常,但偶尔我会得到一个类型相同的MissingMethodException

我没有第三方图书馆。所有的代码都是我自己的。有什么想法吗?

编辑以下是我的3个项目及其所有参考资料。

项目1:Mobile.Libraries

  • MonoTouch的
  • 系统
  • System.Core程序
  • 的System.Xml

项目2:Mobile.Core

  • Mobile.Libraries
  • 系统
  • System.Core程序
  • 的System.Xml

项目3:Mobile.IOS

  • MonoTouch的
  • Mobile.Core
  • 系统
  • System.Core程序
  • 的System.Xml

1 个答案:

答案 0 :(得分:1)

喜欢@ Jonathan.Peppers说当你使用针对完整的.NET4配置文件构建的编译的 .dll时会发生这种情况。

MonoTouch基类库(BCM)提供了Silverlight配置文件(2.1)的超集,增加了4.0。因此,从另一个框架添加预编译的二进制文件可能需要在MonoTouch BCL中存在的某些类型/方法。

解决方案是针对MonoTouch附带的BCL程序集重建所有.dll。这将确保编译器仅使用可用的符号。

为什么它可以在iOS模拟器上运行?

那是因为使用了JIT。由于它是及时编译的,因此可能永远不会到达缺失的符号,因此可以工作,直到您找到丢失的代码(并获得运行时错误)。

另一方面,当您使用设备(或链接器)时,将加载所有符号(并为AOT编译)。任何遗漏都将提前找到,因此您会收到类似上面的构建时错误。