C# 编译时出现单触错误:System.Boolean System.Type::op_Equality(System.Type,System.Type)

C# 编译时出现单触错误:System.Boolean System.Type::op_Equality(System.Type,System.Type),c#,ios,compilation,mono,xamarin.ios,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个项目及其所有参考资料 项

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

Error MT2002: Can not resolve reference: System.Boolean System.Type::op_Equality(System.Type,System.Type) (MT2002)
它在模拟器中运行良好,但是偶尔我会得到一个相同类型的
MissingMethodException

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

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

项目1:移动图书馆

  • 单触式
  • 系统
  • 系统核心
  • Xml
项目2:Mobile.Core

  • 流动图书馆
  • 系统
  • 系统核心
  • Xml
项目3:Mobile.IOS

  • 单触式
  • 移动核心
  • 系统
  • 系统核心
  • Xml

    • Like@Jonathan.Peppers说,当您使用根据完整的.NET4配置文件构建的编译的.dll时,就会发生这种情况

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

      解决方案是根据MonoTouch附带的BCL程序集重新生成所有.dll。这将确保编译器只使用可用的符号

      为什么它能在iOS模拟器上工作?

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


      另一方面,当您使用设备(或链接器)时,所有符号都会被加载(并为AOT编译)。缺少的任何内容都会提前找到,因此会出现如上所述的构建时错误。

      like@Jonathan.Peppers说,当您使用根据完整的.NET4配置文件构建的编译的.dll时,就会出现这种情况

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

      解决方案是根据MonoTouch附带的BCL程序集重新生成所有.dll。这将确保编译器只使用可用的符号

      为什么它能在iOS模拟器上工作?

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


      另一方面,当您使用设备(或链接器)时,所有符号都会被加载(并为AOT编译)。缺少的任何内容都会提前找到,因此会出现类似上述的生成时错误。

      您是否使用针对桌面(可能是Windows或Mac)编译的DLL?确保您使用的任何类库都使用MonoTouch库项目。您是否使用针对桌面(可能是Windows或Mac)编译的DLL?请确保您使用的任何类库都使用MonoTouch库项目。我没有未由MT编译的DLL。我编译MT.3项目中的所有内容,然后编译每个项目,然后每个项目都引用下面的一个。奇怪的是,我看不出如何引用此缺失的方法。请填写错误报告,并附上(你可以标记为私人)一个样本项目显示这一点。这是我的项目结构(参考资料)。我遗漏了什么吗?是的,所有内容都引用了
      mscorlib.dll
      (缺少的类型来自哪里)。在MonoDevelop中暗示了(您看不到),并且它基于您的项目类型(例如,如果它不是MonoTouch库/项目,那么它将不会使用正确的
      mscorlib.dll
      )。请注意,如果您的项目选项之一Build、General、Target framework没有设置为Mono for iPhone,则您没有链接到右侧的
      mscorlib.dll
      它们都设置为Mono for iPhone。我想这是一个错误。我没有DLL不是由MT编译的。我编译了MT.3项目中的所有内容,然后每个项目都被编译,然后引用下面的一个。奇怪的是,我看不出这个缺少的方法是如何被引用的。请填写错误报告,并附上(你可以标记为私人)一个样本项目显示这一点。这是我的项目结构(参考资料)。我遗漏了什么吗?是的,所有内容都引用了
      mscorlib.dll
      (缺少的类型来自哪里)。在MonoDevelop中暗示了(您看不到),并且它基于您的项目类型(例如,如果它不是MonoTouch库/项目,那么它将不会使用正确的
      mscorlib.dll
      )。请注意,如果您的项目选项之一Build、General、Target framework没有设置为Mono for iPhone,则您没有链接到右侧的
      mscorlib.dll
      它们都设置为Mono for iPhone。我想这是一只虫子。