Как скомпилировать библиотеки с помощью monotouch (ошибка: попытка JIT-компиляции с помощью --aot-only) - PullRequest
1 голос
/ 13 марта 2011

Я пытаюсь использовать DotNetZip (http://dotnetzip.codeplex.com/) в проекте с одним касанием.

Я перекомпилировал его для monotouch , сделав два новых проекта monotouch под MonoDevelop (один для ZLib и другой для DotNetZip), поместив код внутрь, удалив код, который ссылается на Windows Forms, и настройка Цель компиляции = Библиотека в опциях проекта.

Я установил активную конфигурацию в MonoDevelop на «Release - iPhone» перед компиляцией.

Затем я сослался на полученные библиотеки DLL в моем основном монотушном проекте.

Это прекрасно работает при работе в симуляторе, но когда я пытаюсь отладить его на реальном устройстве (в моем случае iPod Touch 4), я получаю сообщение об ошибке во время выполнения:

Исключение System.ExecutionEngineException

Попытка JIT-метода компиляции 'Vortaro.SearchTableViewSource: .ctor (Vortaro.SearchViewController)' при работе с параметром --aot-only.

Что происходит в этой строке:

using (ZipFile zip = ZipFile.Read ("dictionary.zip")) {

-

Я также протестировал на простом примере, который делает это только при нажатии кнопки:

ZipFile.Read ("dictionary.zip");

и я получаю эту ошибку:

Необработанное исключение: System.ExecutionEngineException: Попытка JIT-метода компиляции 'Ionic.Zip.ZipContainer: .ctor (object)' при работе с параметром --aot-only.

в Ionic.Zip.ZipEntry.ReadDirEntry (Ionic.Zip.ZipFile zf) [0x000b5] в /Users/(...)/ZipDirEntry.cs:199

Когда я смотрю на конструктор, на который указывает ошибка, я не вижу ничего, что могло бы вызвать компиляцию JIT:

public ZipContainer(Object o)
{
    _zf = (o as ZipFile);
    _zos = (o as ZipOutputStream);
    _zis = (o as ZipInputStream);
}

1 Ответ

1 голос
/ 14 марта 2011

Это ограничение, налагаемое iOS: невозможно генерировать код на deman.Итак, проблема, которую вам нужно выяснить, заключается в том, почему ваш код пытается JIT скомпилировать Vortaro.SearchTableViewSource.ctor, это может быть сделано либо потому, что у вас есть универсальный тип, который его использует, либо вы вызываете Type.GetType ()

Ошибка выглядит не так, как будто она исходит из библиотеки dotnetzip, а выглядит так, как будто она исходит из вашего кода (см. Имя типа)

...