2012-04-27 2 views
1

У меня есть приложение MonoTouch, когда я скомпилировать его для устройства, я получаю следующее сообщение об ошибке:MonoTouch Ошибка при компиляции: System.Boolean System.Type :: op_Equality (System.Type, System.Type)

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

Вы используете DLL, которую вы скомпилировали на рабочем столе (может быть, Windows или Mac)? Убедитесь, что вы используете проект библиотеки MonoTouch для любых библиотек классов, которые вы используете. – jonathanpeppers

ответ

1

Как @ Jonathan.Peppers сказал, что это происходит, когда вы используете скомпилирован .dll, который был построен на полной, .NET4, профиль ,

Библиотеки базового класса MonoTouch (BCM) предоставляют надмножество профиля Silverlight (2.1) с некоторыми дополнениями 4.0. Поэтому добавление предварительно скомпилированных двоичных файлов из другой структуры может потребовать некоторых типов/методов, которые не, присутствующих в MonoTouch BCL.

Решение состоит в том, чтобы перестроить всю вашу DLL-систему против сборок BCL, поставляемых с MonoTouch. Это гарантирует, что компилятор будет использовать только доступные символы.

Почему это работает на iOS-симуляторе?

Это потому, что используется JIT. Так как он скомпилирован Just In Time, вы можете может никогда не дойти до недостающих символов, так что может работать до тех пор, пока вы не нажмете недостающий код (и получите ошибку выполнения).

С другой стороны, когда вы используете устройство (или компоновщик), тогда все символы загружаются (и скомпилированы для AOT). Все, что отсутствует, будет найдено раньше времени, чтобы вы получили ошибку времени сборки, подобную приведенной выше.

+0

У меня нет DLL, не скомпилированного MT. Я собираю ВСЕ в MT. 3 проекта, затем каждый из них ссылается на приведенный ниже. –

+0

Странно, я не вижу, как этот недостающий метод можно ссылаться иначе. Пожалуйста, заполните отчет об ошибке на странице http://bugzilla.xamarin.com и прикрепите (вы можете отметить его закрытым) пример проекта, показывающий это. – poupou

+0

I Сделано выше. Это моя структура проекта (ссылки). Я что-то пропустил? –

Смежные вопросы