msgpack-cli icon indicating copy to clipboard operation
msgpack-cli copied to clipboard

About AOT Error at serialization By Unity

Open st0326s opened this issue 8 years ago • 14 comments

Serializing with the following sources, AOT error occurred on the actual machine, I am in trouble because I do not understand the solution method.

How do I fix it?

■Source Code

    public byte[] Serialize(object data)
    {
        // --- シリアライズ
        var memoryStream = new MemoryStream();

        var context = new SerializationContext();
        context.SerializationMethod = SerializationMethod.Map;

        // シリアライズした結果をMemoryStreamに書き込み
        var serializer = MessagePackSerializer.Get<object>(context);
        serializer.Pack(memoryStream, data);

        // バイト配列を取り出す
        return memoryStream.ToArray();
    }

■Source Description param object data is Class Instance

■Error line var serializer = MessagePackSerializer.Get(context);

■Error ExecutionEngineException: Attempting to call method 'MsgPack.Serialization.SerializationContext::GetSerializer' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at System.AppDomain.add_UnhandledException (System.UnhandledExceptionEventHandler value) [0x00000] in :0 at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.Get[T] (MsgPack.Serialization.SerializationContext context, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.Get[T] (MsgPack.Serialization.SerializationContext context) [0x00000] in :0 at UnityEngine.Events.UnityAction.Invoke () [0x00000] in :0 at UnityEngine.Events.PersistentCall..ctor () [0x00000] in :0 at UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) [0x00000] in :0 at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in :0 at UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in :0 at UnityEngine.EventSystems.ExecuteEvents+EventFunction1[T1].Invoke (.T1 handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0 at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction1 functor) [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.ProcessTouchPress (UnityEngine.EventSystems.PointerEventData pointerEvent, Boolean pressed, Boolean released) [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.ProcessTouchEvents () [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.Process () [0x00000] in :0 at UnityEngine.EventSystems.EventSystem.Update () [0x00000] in :0 Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at System.AppDomain.add_UnhandledException (System.UnhandledExceptionEventHandler value) [0x00000] in :0 at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.Get[T] (MsgPack.Serialization.SerializationContext context, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.Get[T] (MsgPack.Serialization.SerializationContext context) [0x00000] in :0 at UnityEngine.Events.UnityAction.Invoke () [0x00000] in :0 at UnityEngine.Events.PersistentCall..ctor () [0x00000] in :0 at UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) [0x00000] in :0 at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in :0 at UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in :0 at UnityEngine.EventSystems.ExecuteEvents+EventFunction1[T1].Invoke (.T1 handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0 at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction1 functor) [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.ProcessTouchPress (UnityEngine.EventSystems.PointerEventData pointerEvent, Boolean pressed, Boolean released) [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.ProcessTouchEvents () [0x00000] in :0 at UnityEngine.EventSystems.StandaloneInputModule.Process () [0x00000] in :0 at UnityEngine.EventSystems.EventSystem.Update () [0x00000] in :0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1) UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchPress(PointerEventData, Boolean, Boolean) UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents() UnityEngine.EventSystems.StandaloneInputModule:Process() UnityEngine.EventSystems.EventSystem:Update()

(Filename: currently not available on il2cpp Line: -1)

■Libralies Msgpack 0.8.0

■Enviroment ●Development environment Unity5.5.1p1 Xcode8.2

●Test environment iPhone5se iOS10.1

■extra use IL2CPP Run in Xcode as "Debug" Development build=ON

st0326s avatar Jun 01 '17 08:06 st0326s

Sorry for delay.

It is hard to handle object in IL2CPP environment now. In general, you can avoid AOT error to call MessagePackSerializer.Prepare<T>() for each types used in your object tree.

yfakariya avatar Jun 11 '17 11:06 yfakariya

Hello, I got same trouble, How do solution?

unity3d 5.4.5 msgpack version 0.9

About MessagePackSerializer.Prepare<T>()

var serializer = SerializationContext.Default.GetSerializer<T>(); byte[] data = serializer.PackSingleObject(o);

tianwvf avatar Jun 28 '17 07:06 tianwvf

@tianwvf Would you show me actual error message and type?

yfakariya avatar Jun 28 '17 12:06 yfakariya

@yfakariya I am sorry to have trouble but will you tell me a sample source?

Is it in front of line "MessagePackSerializer.Get" that describes "MessagePackSerializer.Prepare<T>() "?

st0326s avatar Jun 29 '17 03:06 st0326s

1.Sample Code var serializer = SerializationContext.Default.GetSerializer(); byte[] data = serializer.PackSingleObject(o);

I seem , when my code decode contain some Array or like arr[] , or too long , it's have the error , Error like first msg:

Yes,
'MsgPack.Serialization.SerializationContext::GetSerializer.Get' for which no ahead of time (AOT) code was generated.

It's my Code . public T MpRead<T>(bool isShowLog = false) { var serializer = SerializationContext.Default.GetSerializer<T>(); // T newdata = serializer.UnpackSingleObject(msgData); return newdata; }

tianwvf avatar Jun 29 '17 18:06 tianwvf

Hi, It's my Get Error information .

Error:

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

ExecutionEngineException: Attempting to call method 'MsgPack.Serialization.SerializationContext::GetSerializer' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MessageData.MpRead[T] (Boolean isShowLog) [0x00000] in :0 at MainPlayer.LoginToServerResult (.MessageData msgData) [0x00000] in :0 at NetProcess.OnExecReceive (Engine.Connection connection, Int32 key, System.Byte[] msgData) [0x00000] in :0 at Engine.ConnectionManager+OnReceiveDelegate.Invoke (Engine.Connection so, Int32 msgType, System.Byte[] byteMsg) [0x00000] in :0 at Engine.ConnectionManager.Update () [0x00000] in :0 Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MessageData.MpRead[T] (Boolean isShowLog) [0x00000] in :0 at MainPlayer.LoginToServerResult (.MessageData msgData) [0x00000] in :0 at NetProcess.OnExecReceive (Engine.Connection connection, Int32 key, System.Byte[] msgData) [0x00000] in :0 at Engine.ConnectionManager+OnReceiveDelegate.Invoke (Engine.Connection so, Int32 msgType, System.Byte[] byteMsg) [0x00000] in :0 at Engine.ConnectionManager.Update () [0x00000] in :0 Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MessageData.MpRead[T] (Boolean isShowLog) [0x00000] in :0 at MainPlayer.LoginToServerResult (.MessageData msgData) [0x00000] in :0 at NetProcess.OnExecReceive (Engine.Connection connection, Int32 key, System.Byte[] msgData) [0x00000] in :0 at Engine.ConnectionManager+OnReceiveDelegate.Invoke (Engine.Connection so, Int32 msgType, System.Byte[] byteMsg) [0x00000] in :0 at Engine.ConnectionManager.Update () [0x00000] in :0 Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0 at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in :0 at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in :0 at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, IList1 members, MsgPack.Serialization.SerializationContext context, System.Func2[]& getters, System.Action2[]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <filename unknown>:0 at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, SerializerCapabilities capabilities) [0x00000] in :0 at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in :0 at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in :0 at MessageData.MpRead[T] (Boolean isShowLog) [0x00000] in :0 at MainPlayer.LoginToServerResult (.MessageData msgData) [0x00000] in :0 at NetProcess.OnExecReceive (Engine.Connection connection, Int32 key, System.Byte[] msgData) [0x00000] in :0 at Engine.ConnectionManager+OnReceiveDelegate.Invoke (Engine.Connection so, Int32 msgType, System.Byte[] byteMsg) [0x00000] in :0 at Engine.ConnectionManager.Update () [0x00000] in :0

(Filename: currently not available on il2cpp Line: -1)


tianwvf avatar Jul 01 '17 05:07 tianwvf

It's My Function: decode Data public T Read<T>() {

    MessagePackSerializer<T> serializer = SerializationContext.Default.GetSerializer<T>();
    //        			
    T newdata = serializer.UnpackSingleObject(msgData);
    return newdata;
}

tianwvf avatar Jul 01 '17 06:07 tianwvf

@st0326s Yes. It is needed to tell IL2CPP compiler that the generic code for the type T is required.

yfakariya avatar Jul 01 '17 06:07 yfakariya

@tianwvf Thank you! I see that your error was occurred of internal generic GetSerializer<T> code of msgpack for cli. It should be caused insufficient MessagePackSerializer.Prepare<T>() call. For example, you might forget call Prepare for "leaf" properties' type of your object tree.

yfakariya avatar Jul 01 '17 06:07 yfakariya

@yfakariya Thank you Reply ! I don't know how to do solve The Error . I try to call MessagePackSerializer.Prepare() MessagePackSerializer.Prepare() MessagePackSerializer.Prepare<UserInfo>() etc...

so I publish ios run still The Error !

tianwvf avatar Jul 01 '17 06:07 tianwvf

@tianwvf did you manage to solve it? I get a similar error when trying to build my Unity game for iOS:

ExecutionEngineException: Attempting to call method 'MsgPack.Serialization.SerializationContext::GetSerializer<System.Nullable`1[[System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>' for which no ahead of time (AOT) code was generated.
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.ReflectionExtensions.InvokePreservingExceptionType (System.Reflection.MethodInfo source, System.Object instance, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.SerializationContext+SerializerGetter.Get (MsgPack.Serialization.SerializationContext context, System.Type targetType, System.Object providerParameter) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.SerializationContext.GetSerializer (System.Type targetType, System.Object providerParameter) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.ReflectionSerializers.ReflectionSerializerHelper.GetMetadata (System.Type targetType, System.Collections.Generic.IList`1[T] members, MsgPack.Serialization.SerializationContext context, System.Func`2[System.Object,System.Object][]& getters, System.Action`2[System.Object,System.Object][]& setters, System.Reflection.MemberInfo[]& memberInfos, MsgPack.Serialization.DataMemberContract[]& contracts, MsgPack.Serialization.MessagePackSerializer[]& serializers) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer`1[T]..ctor (MsgPack.Serialization.SerializationContext context, MsgPack.Serialization.SerializationTarget target, MsgPack.Serialization.SerializerCapabilities capabilities) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T] (MsgPack.Serialization.SerializationContext context, System.Type concreteType, MsgPack.Serialization.PolymorphismSchema schema) [0x00000] in <00000000000000000000000000000000>:0 
  at MsgPack.Serialization.SerializationContext.GetSerializer[T] (System.Object providerParameter) [0x00000] in <00000000000000000000000000000000>:0 
  at Game.MultiplayerMessageManager..cctor () [0x00000] in <00000000000000000000000000000000>:0 
  at LevelController.Start () [0x00000] in <00000000000000000000000000000000>:0 

DataGreed avatar Jul 19 '19 19:07 DataGreed

Okay, I've managed to solve it by calling MessagePackSerializer.PrepareType<T>() for all serialized types before MessagePackSerializer.Get

Like this:

MessagePackSerializer.PrepareType<string>();
MessagePackSerializer.PrepareType<MultiplayerMessageType>();
MessagePackSerializer.PrepareType<float>();
MessagePackSerializer.PrepareType<float?>();

///etc...

DataGreed avatar Jul 19 '19 20:07 DataGreed

I suggest adding it to readme since this topic does not seem to be covered anywhere

DataGreed avatar Jul 19 '19 20:07 DataGreed

@DataGreed You are right. I've added wiki and readme.

yfakariya avatar Jul 21 '19 09:07 yfakariya