Unity在iOS上反射创建第三方dll中类型对象时遇到的问题

unity2018.2.6f1.  项目使用il2cpp打包iOS 报错

[2019-01-03 20:48:58.113]|GameFramework|Can not load data table 'Worker' from 'Assets/GameMain/DataTables/Table_Worker.bytes' with error message 'System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ExecutionEngineException: Attempting to call method 'GameFramework.DataTable.DataTableManager+DataTable`1[[GameMain.DRWorker, Assembly-CSharp, Version=2.0.0.668, Culture=neutral, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated.
  at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0 
  at System.RuntimeType.CreateInstanceImpl (System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes, System.Threading.StackCrawlMark& stackMark) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Activator.CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.DataTable.DataTableManager.CreateDataTable (System.Type dataRowType, System.String name, System.Object dataTableAsset) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.GameDataTableHelper.LoadDataTable (System.Type dataRowType, System.String dataTableName, System.String dataTableNameInType, System.Object dataTableAsset, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DataTableHelperBase.LoadDataTable (System.Object dataTableAsset, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.DataTable.DataTableManager.LoadDataTableSuccessCallback (System.String dataTableAssetName, System.Object dataTableAsset, System.Single duration, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.Resource.ResourceManager+ResourceLoader+LoadResourceAgent.OnAssetObjectReady (GameFramework.Resource.ResourceManager+ResourceLoader+AssetObject assetObject) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DefaultLoadResourceAgentHelper.UpdateAssetBundleRequest () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DefaultLoadResourceAgentHelper.Update () [0x00000] in <00000000000000000000000000000000>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0 
  at System.RuntimeType.CreateInstanceImpl (System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes, System.Threading.StackCrawlMark& stackMark) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Activator.CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.DataTable.DataTableManager.CreateDataTable (System.Type dataRowType, System.String name, System.Object dataTableAsset) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.GameDataTableHelper.LoadDataTable (System.Type dataRowType, System.String dataTableName, System.String dataTableNameInType, System.Object dataTableAsset, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DataTableHelperBase.LoadDataTable (System.Object dataTableAsset, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.DataTable.DataTableManager.LoadDataTableSuccessCallback (System.String dataTableAssetName, System.Object dataTableAsset, System.Single duration, System.Object userData) [0x00000] in <00000000000000000000000000000000>:0 
  at GameFramework.Resource.ResourceManager+ResourceLoader+LoadResourceAgent.OnAssetObjectReady (GameFramework.Resource.ResourceManager+ResourceLoader+AssetObject assetObject) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DefaultLoadResourceAgentHelper.UpdateAssetBundleRequest () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityGameFramework.Runtime.DefaultLoadResourceAgentHelper.Update () [0x00000] in <00000000000000000000000000000000>:0 '.|

GameMain.ProcedurePreload:OnLoadDataTableFailure(Object, GameEventArgs)
GameFramework.EventPool`1:HandleEvent(Object, T)
GameFramework.EventPool`1:Update(Single, Single)
GameFramework.GameFrameworkEntry:Update(Single, Single)

电脑上正常,手机上报错,怀疑是dll版本问题,默认.net3.5,unity默认4.0,兼容2.0,尝试过将dll编成4.0与2.0打包,均失败。使用源码一样报错,怕忘记录一下,解决后更新

猜你喜欢

转载自blog.csdn.net/jcpkwudi/article/details/85787355