JsonFx с IL2CPP
Конструктор не работает с IL2CPP. Вот журнал, который я получаю.
MissingMethodException: метод не найден: "Конструктор по умолчанию не найден... ctor () из System.ComponentModel.ByteConverter". в System.ArgumentNullException..ctor (System.String paramName) [0x00000] в: 0 в System.Activator.CreateInstance (тип System.Type, логический nonPublic) [0x00000] в: 0 в System.Activator.CreateInstance (System.Type) тип) [0x00000] в: 0 в System.ComponentModel.TypeDescriptor.GetConverter (тип System.Type) [0x00000] в: 0 в JsonFx.Json.TypeCoercionUtility.CoerceType (значение System.Type targetType, значение System.Oxject] [System.Oxject] [0] в: 0 в JsonFx.Json.JsonReader.ReadNumber (System.Type Ожидаемый тип) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type Ожидаемый тип, логический тип typeIsHint) [0x00000] в: 0
в JsonFx.Json.JsonReader.ReadArray (System.Type arrayType) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type ОжидаемыйТип, логический тип IsHint) [0x00000] в: 0
в JsonFx.Json.JsonReader.ReadObject (System.Type objectType) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type Ожидаемый тип, логический тип IsHint) [0x00000] в: 0 в JsonFx.Json.Jader. ReadObject (System.Type objectType) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type Ожидаемый тип, логический тип typeIsHint) [0x00000] в: 0 в JsonFx.Json.JsonReader.ReadObject (System.TypeT) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type ОжидаемыйТип, логический тип IsHint) [0x00000] в: 0
в JsonFx.Json.JsonReader.ReadObject (System.Type objectType) [0x00000] в: 0 в JsonFx.Json.JsonReader.Read (System.Type Ожидаемый тип, логический тип IsHint) [0x00000] в: 0 в JsonFx.Json.Jader. Десериализовать (запуск Int32, тип System.Type) [0x00000] в: 0 в JsonFx.Json.JsonReader.Deserialize (значение System.String, запуск Int32, тип System.Type) [0x00000] в: 0 в JsonFx.Json.JsonReader.Deserialize[BGS] (значение System.String) [0x00000] в: 0 в GameData.ParseJson () [0x00000] в: 0 в GameData.loaddata () [0x00000] в: 0 в mainmenuUI.Start () [0x00000] в: 0 в System.Array + InternalEnumerator1[System.Collections.Hashtable+Slot].get_Current () [0x00000] in <filename unknown>:0 System.InternalEnumerator
1: get_Current ()
2 ответа
Это похоже на проблему с зачисткой. Обратите внимание, что хотя для параметра "Уровень очистки" в редакторе Unity может быть задано значение "Отключить", серверная часть сценариев IL2CPP будет по-прежнему выполнять эквивалентное удаление кода байта.
Как уже упоминал Мариус, вам нужно будет явно указать инструментальной цепочке сборки Unity, чтобы она не удаляла тип ByteConverter. Вы можете добавить файл link.xml в свой каталог Assets со следующим содержимым:
<linker>
<assembly fullname="System">
<type fullname="System.ComponentModel.ByteConverter" preserve="all"/>
</assembly>
</linker>
Это сохранит все в типе ByteConverter (preserve="all"
element), что может быть слишком много, но вы можете следовать документации, чтобы минимизировать количество IL-кода, хранящегося в сборке.
Это ошибка зачистки. При сборке IL2CPP зачистка всегда включена. Попробуйте обновить до последней версии Unity. В противном случае вы можете явно запретить удаление пространств имен.