1

私はMonoTouchアプリを持っていますが、デバイス用にコンパイルすると、次のエラーが発生します。

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

シミュレーターでは問題なく動作しますがMissingMethodException、同じタイプのを取得することがあります。

サードパーティのライブラリはありません。すべてのコードは私自身のものです。何か案は?

編集ここに私の3つのプロジェクトとそのすべての参照があります。

プロジェクト1:Mobile.Libraries

  • モノタッチ
  • システム
  • System.Core
  • System.Xml

プロジェクト2:Mobile.Core

  • Mobile.Libraries
  • システム
  • System.Core
  • System.Xml

プロジェクト3:Mobile.IOS

  • モノタッチ
  • Mobile.Core
  • システム
  • System.Core
  • System.Xml
4

1 に答える 1

1

@ Jonathan.Peppersが言ったように、これは、完全な.NET4プロファイルに対してビルドされたコンパイル済みの.dllを使用した場合に発生します。

MonoTouch基本クラスライブラリ(BCM)は、Silverlightプロファイル(2.1)のスーパーセットに4.0を追加したものを提供します。したがって、別のフレームワークからコンパイル済みのバイナリを追加するには、MonoTouchBCLに存在しないいくつかのタイプ/メソッドが必要になる場合があります。

解決策は、MonoTouchに付属しているBCLアセンブリに対してすべての.dllを再構築することです。これにより、コンパイラは使用可能なシンボルのみを使用するようになります。

iOSシミュレーターで動作するのはなぜですか?

これは、JITが使用されているためです。ジャストインタイムでコンパイルされているため、欠落しているシンボルに到達することはない可能性があり、欠落しているコードに到達するまで(そしてランタイムエラーが発生するまで)機能します。

一方、デバイス(またはリンカー)を使用すると、すべてのシンボルがロードされます(そしてAOT用にコンパイルされます)。不足しているものはすべて事前に検出されるため、上記のようなビルド時エラーが発生します。

于 2012-04-27T13:46:39.600 に答える