MonoTouch 4.0 выбрасывает ReflectionTypeLoadException с использованием симулятора - PullRequest
7 голосов
/ 11 апреля 2011

После обновления работающего приложения MonoTouch 3.x до MonoTouch 4.0 при попытке запустить сборку отладки или выпуска на симуляторе я получаю следующую ошибку:

Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 
  at MonoTouch.ObjCRuntime.Runtime.RegisterAssembly (System.Reflection.Assembly a) [0x00000] in <filename unknown>:0 

Похоже, проблемас System.Xml.Linq, однако я проверил все проекты и ссылки, и это даже не кажется переходной ссылкой из того, что я могу сказать.Я просто, кажется, не использую это где-либо .

Сообщение об исключении всегда "Не удалось загрузить System.Xml.Linq.XNodeNavigator from System.Xml.Linq".

У кого-нибудь есть идеи?

1 Ответ

4 голосов
/ 16 июля 2011

Основная причина в том, что симулятор iOS только обновляет файлы, но никогда не удаляет их (даже если вы удаляете свое приложение из симулятора).

Это вызывает проблемы, если у вас есть какие-то файлы (например, System.Xml.Linq) в какой-то момент и вы удалите их позже (напрямую или воспользуйтесь компоновщиком, который может его удалить). Оттуда у вас будут старые, устаревшие файлы в каталоге приложения симулятора.

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

Самый простой способ - сбросить симулятор iOS, который удалит все (все приложения и все файлы).

...