这个Demo没什么说的,就是对ILRuntime生成的DLL进行加载。
// 在一个协同方法里
// 首先实例化一个应用程序域
ILRuntime.Runtime.Enviorment.AppDomain appdomain = new ILRuntime.Runtime.Enviorment.AppDomain();
// 加载dll,同理看需求是否需要加载pdb
WWW www = new WWW(Application.streamingAssetsPath + "/HotFix_Project.dll");
while (!www.isDone)
{
yield return null;
}
if (!string.IsNullOrEmpty(www.error))
{
UnityEngine.Debug.LogError(www.error);
}
byte[] dll = www.bytes;
www.Dispose();
//
System.IO.MemoryStream fs = new MemoryStream(dll);
// 加载热更程序集
appdomain.LoadAssembly(fs, p, new ILRuntime.Mono.Cecil.Pdb.PdbReaderProvider());
这些就是主要的加载流程和代码。
需要注意的是:fs和p,得在程序释放的时候销毁(新版本的要求)。
当然,在实际项目中,一般不会完全按照demo的方式写。
本人主要会将DLL和pdb文件都转化成二进制文本,这样就符合unity资源格式,进行统一管理。
热更工程在生成DLL后,对DLL文件进行二进制转化并保存。然后丢掉到项目的更新资源目录。
加载的方式就和其他资源一样,获取 TextAsset 对象,直接获取 bytes。然后再 LoadAssembly。
(以上纯属个人经验)