Проблемы JIT / AOT при запуске приложения montouch - PullRequest
1 голос
/ 26 сентября 2011

Я уже несколько недель занимаюсь разработкой однотонной игры на OpenGL для iPhone. Совсем недавно он собирался и работал правильно на моем тестовом оборудовании (iPhone 4). Но когда я загрузил проект вчера, он дал мне ошибку компилятора:

Framework 'Mono for iPhone' not Installed.

Я не могу придумать никаких причин для этого, я не изменил свою систему или исходный код. К счастью, Monodevelop уже преследовал меня ссылкой на скачивание последней загрузки API. Я установил и ошибка ушла. Но вместо этого я теперь получаю ошибку времени выполнения при запуске приложения http://screencast.com/t/EXyNqqhNoEsu:

System.ExecutionEngineException has been thrown. Attempting to JIT compile method ... FirstOrDefault ... while running with --aot-only. 

Это происходит при попытке создать новый DataContractSerializer для загрузки некоторых настроек XML: http://screencast.com/t/4SDzU5ygg

Это заставило меня впервые изменить настройку поведения компоновщика в настройках проекта приложения. Было установлено «Не связывать», как это было. Когда я переключаюсь на «Link SDK сборки только», он запускается без вышеуказанного исключения.

Это было бы здорово, проблема решена, за исключением того, что компиляция и развертывание на телефоне в этом режиме занимает почти полчаса (!). Выходные данные сборки находятся на «Связывание SDK только для сборки ...». Это нормально? Я не думаю, что смогу сохранить здравомыслие так долго. Даже «Не связывай» занимает около пяти минут, что является изнурительным шагом, когда ты пытаешься найти и устранить неисправность.

Повторюсь, это код, который работал каждый день в течение нескольких недель, и, насколько мне известно, он не изменился из своего рабочего состояния. Кто-нибудь знает, почему эта ошибка возникает сейчас, и какое решение может быть для продолжения использования опции «Не связывать»?

1 Ответ

0 голосов
/ 26 сентября 2011

Framework 'Mono для iPhone' не установлен.

По какой-то причине MonoDevelop не смог найти вашу установку MonoTouch.Я не могу сказать почему, но лучше всего попробовать перезапустить MonoDevelop и проверить настройки MD для Местоположение SDK (и исправить путь, если MonoTouch не был найден).

Исключение System.ExecutionEngineException.Попытка JIT-метода компиляции ... FirstOrDefault ... при работе с параметром --aot-only.

MonoTouch 4.2 [.1] может иногда выдавать ExecutionEngineException , когда выбран параметр компоновщика " Не связывать ".Эта ошибка была исправлена ​​и станет частью будущих выпусков MonoTouch.

FWIW Link SDK сборки по умолчанию и всегда должны использоваться для сборок устройств.Линкер создаст намного меньших приложений, а также позволяет быстрее сборок в большинстве случаев (поскольку компоновщик может сохранить на 100 КБ быстрее, чем компилятор AOT может обработать эти 100 КБ).

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

...