当前位置:   article > 正文

Unity发布IOS时设置link.xml遇到的一个fullname不正确的问题

link.xml

前两天在发布IOS时遇到两个问题。

1、StreamingAssets目录下的文本文件,在windows,android上可以用FileStream来读取,但是在IOS上却不能。经过尝试,用UnityWebRequest取到。

2、读取配置文件转换成记录列表时报错:找不到构造函数。

  最开始以为时LitJson版本太低,将LitJson升级,并没有用。

  百度后发现是IL2CPP的原因,我们很多逻辑封装在dll中,所以应该是反射相关的类全部被裁剪掉了。于是在设置中取消Strip Engine Code的勾选项,结果没有用。

  设置link.xml,fullname填写的dll的名称,依然报错。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <linker>
  3. <assembly fullname="aaa">
  4. <namespace fullname="aaa.FrameWork" preserve="all"/>
  5. <namespace fullname="aaa.Global" preserve="all"/>
  6. <namespace fullname="GameProtocol" preserve="all"/>
  7. <namespace fullname="ProtoBuf" preserve="all"/>
  8. <namespace fullname="LitJson" preserve="all"/>
  9. </assembly>
  10. </linker>

  最后没有办打算用最笨的方法,在unity某个代码中写一个不被调用的方法,里面把所有dll中反射用到的类new一次。试了几个配置文件类还真有效。

  由于protobuffer用到的所有类都是反射调用,所以我打算用反射取dll中所有的类型,然后自动生成一个文件来实现new所有protobuffer类。在这个过程中突然想到把dll的fullname打印出来看下

  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using UnityEditor;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. using System.Reflection;
  10. public class EditorTools : MonoBehaviour {
  11. [MenuItem("Tools/显示fullname")]
  12. public static void ShowFullName()
  13. {
  14. var ass = Assembly.LoadFile(Application.dataPath + "/Plugins/aaa.dll");
  15. Debug.Log("fullName=" + ass.FullName.Trim());
  16. Debug.Log("dllName=" + ass.GetName());
  17. }
  18. }

  结果 fullName=aaa, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null,修改link.xml

<assembly fullname="aaa, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">

  顺利通过。

 

  dll的fullname为什么是这么长一个字符串,或者assembly标签可以用其它属性找到dll,暂时没时间去了解,请知道的朋友留言告知。

  

转载于:https://www.cnblogs.com/kaishanguai/p/11176544.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/115359
推荐阅读
相关标签
  

闽ICP备14008679号