我有一个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
单点触控
移动核心
系统
系统核心
系统文件
最佳答案
就像@ Jonathan.Peppers所说的,当您使用针对完整.NET4配置文件构建的已编译.dll时,就会发生这种情况。
MonoTouch基类库(BCM)提供了Silverlight配置文件(2.1)的超集,并增加了4.0。因此,从另一个框架添加预编译的二进制文件可能需要MonoTouch BCL中不存在的某些类型/方法。
解决方案是根据MonoTouch附带的BCL程序集重建所有.dll。这样可以确保编译器仅使用可用的符号。
为什么它可以在iOS模拟器上运行?
那是因为使用了JIT。由于它是按时编译的,因此您可能永远不会到达缺少的符号,因此它可以起作用,直到您遇到缺少的代码(并获得运行时错误)。
另一方面,当您使用设备(或链接器)时,所有符号都会被加载(并为AOT编译)。任何丢失的东西都会提前发现,因此您会遇到类似上面的构建时错误。