【问题标题】:Unity Json.net System.Reflection.Emit error in iOSiOS中的Unity Json.net System.Reflection.Emit错误
【发布时间】:2021-02-24 19:32:28
【问题描述】:

我按照说明将链接.xml 包含在资产文件夹中,但仍然出现错误。 我认为这可能与反序列化字典有关,因为错误紧随其后:

 System.Collection.Generic.IDictionary'2:set_Item(TKey, TValue).

看起来 link.xml 中包含所有转换器,但也许我遗漏了一些东西。这是link.xml的链接

这是堆栈:

/Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System.Reflection.Emit/DynamicMethod.cpp(20) : Unsupported internal call for IL2CPP:DynamicMethod::create_dynamic_method - System.Reflection.Emit is not supported.   at System.Reflection.Emit.DynamicMethod.CreateDynMethod () [0x00000] in <filename unknown>:0 
  at System.Reflection.Emit.DynamicMethod.CreateDelegate (System.Type delegateType) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Utilities.DynamicReflectionDelegateFactory.CreateDefaultConstructor[T] (System.Type type) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract (Newtonsoft.Json.Serialization.JsonContract contract) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract (System.Type objectType) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract (System.Type objectType) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract (System.Type type) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <filename unknown>:0 
  at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <filename unknown>:0 

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    这种情况下的错误与托管代码剥离或 link.xml 文件无关。发生此错误的原因是 Newtonsoft JSON 库正在尝试将 System.Reflection.Emit 与 IL2CPP 一起使用。 IL2CPP 不支持运行时代码生成,因此会出现错误消息。

    This answer 表示有一个版本的 Newtonsoft JSON 库可以与 IL2CPP 一起使用,但您可能想尝试一下。

    【讨论】:

      【解决方案2】:

      您可以在 Unity 中使用 netstandard 版本的Newtonsoft.Json,它可以正常工作(至少在 2018 年及更高版本中)。看来这个库已经改变了一些内部实现不使用System.Reflection.Emit

      查看this answer了解详情。

      这是microsoft article的摘录:

      • 在 zip 文件中,导航到 lib/netstandard2.0 目录并复制 Newtonsoft.Json.dll 文件。将 Newtonsoft.Json.dll 文件粘贴到 Unity 项目的 Plugins 目录中。

      • 在 Unity 项目的 Assets 目录中创建一个名为 link.xml 的文件,并添加以下 XML。这将确保 Unity 的字节码剥离过程在导出到 IL2CPP 平台时不会删除必要的数据。虽然此步骤特定于此库,但您可能会遇到以类似方式使用反射的其他库的问题。有关详细信息,请参阅 Unity 关于此主题的文档。

         <linker>
           <assembly fullname="System.Core">
             <type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
           </assembly>
         </linker>
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        相关资源
        最近更新 更多