1

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

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

它在模拟器中运行良好,但偶尔我会得到一个MissingMethodException相同类型的。

我没有第 3 方库。所有的代码都是我自己的。有任何想法吗?

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

项目 1:Mobile.Libraries

  • 单点触控
  • 系统
  • 系统核心
  • 系统文件

项目 2:Mobile.Core

  • 移动图书馆
  • 系统
  • 系统核心
  • 系统文件

项目三:Mobile.IOS

  • 单点触控
  • 移动核心
  • 系统
  • 系统核心
  • 系统文件
4

1 回答 1

1

就像@Jonathan.Peppers 所说,当您使用针对完整 .NET4 配置文件构建的已编译.dll 时,就会发生这种情况。

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

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

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

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

另一方面,当您使用设备(或链接器)时,所有符号都会被加载(并为 AOT 编译)。任何缺失的东西都会提前被发现,所以你会得到一个像上面那样的构建时错误。

于 2012-04-27T13:46:39.600 回答