Unity發布IOS時設置link.xml遇到的一個fullname不正確的問題


前兩天在發布IOS時遇到兩個問題。

1、StreamingAssets目錄下的文本文件,在windows,android上可以用FileStream來讀取,但是在IOS上卻不能。經過嘗試,用UnityWebRequest取到。

2、讀取配置文件轉換成記錄列表時報錯:找不到構造函數。

  最開始以為時LitJson版本太低,將LitJson升級,並沒有用。

  百度后發現是IL2CPP的原因,我們很多邏輯封裝在dll中,所以應該是反射相關的類全部被裁剪掉了。於是在設置中取消Strip Engine Code的勾選項,結果沒有用。

  設置link.xml,fullname填寫的dll的名稱,依然報錯。

<?xml version="1.0" encoding="utf-8"?>
<linker>  
  <assembly fullname="aaa">
    <namespace fullname="aaa.FrameWork" preserve="all"/>
    <namespace fullname="aaa.Global" preserve="all"/>
    <namespace fullname="GameProtocol" preserve="all"/>
    <namespace fullname="ProtoBuf" preserve="all"/>
    <namespace fullname="LitJson" preserve="all"/>
  </assembly>
</linker>

  最后沒有辦打算用最笨的方法,在unity某個代碼中寫一個不被調用的方法,里面把所有dll中反射用到的類new一次。試了幾個配置文件類還真有效。

  由於protobuffer用到的所有類都是反射調用,所以我打算用反射取dll中所有的類型,然后自動生成一個文件來實現new所有protobuffer類。在這個過程中突然想到把dll的fullname打印出來看下

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using System.Reflection;

public class EditorTools : MonoBehaviour {
    [MenuItem("Tools/顯示fullname")]
    public static void ShowFullName()
    {
        var ass = Assembly.LoadFile(Application.dataPath + "/Plugins/aaa.dll");

        Debug.Log("fullName=" + ass.FullName.Trim());
        Debug.Log("dllName=" + ass.GetName());
            
    }
}

  結果 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,暫時沒時間去了解,請知道的朋友留言告知。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM