From 1a985027fba8648436ca5fdb2ccab43029de2964 Mon Sep 17 00:00:00 2001 From: Blank Date: Wed, 16 Oct 2024 21:57:57 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]1.=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B?= =?UTF-8?q?=E3=80=82=E9=87=8D=E5=A4=8D=E5=8A=A0=E8=BD=BD=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E9=9B=86=E5=AF=BC=E8=87=B4=E5=8F=8C=E9=87=8D=E5=9F=9F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Framework/Procedure/HotfixHelper.cs | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Framework/Procedure/HotfixHelper.cs b/Assets/Scripts/Framework/Procedure/HotfixHelper.cs index 15ef6cb..c6e2d9e 100644 --- a/Assets/Scripts/Framework/Procedure/HotfixHelper.cs +++ b/Assets/Scripts/Framework/Procedure/HotfixHelper.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Reflection; using GameFrameX.Runtime; using HybridCLR; @@ -7,35 +8,54 @@ namespace Unity.Startup.Procedure { public static class HotfixHelper { + const string HotfixName = "Unity.Hotfix"; + public static async void StartHotfix() { - Log.Info("开始加载AOT DLL"); - if (!ApplicationHelper.IsEditor) + if (ApplicationHelper.IsEditor) { - var aotDlls = AOTGenericReferences.PatchedAOTAssemblyList.ToArray(); - foreach (var aotDll in aotDlls) + var assemblies = Utility.Assembly.GetAssemblies(); + foreach (var assembly in assemblies) { - Log.Info("开始加载AOT DLL ==> " + aotDll); - var assetHandle = await GameApp.Asset.LoadAssetAsync(Utility.Asset.Path.GetAOTCodePath(aotDll)); - var aotBytes = assetHandle.GetAssetObject().bytes; - RuntimeApi.LoadMetadataForAOTAssembly(aotBytes, HomologousImageMode.SuperSet); + if (assembly.GetName().Name.Equals(HotfixName, StringComparison.OrdinalIgnoreCase)) + { + Run(assembly); + break; + } } + + return; + } + + Log.Info("开始加载AOT DLL"); + + var aotDlls = AOTGenericReferences.PatchedAOTAssemblyList.ToArray(); + foreach (var aotDll in aotDlls) + { + Log.Info("开始加载AOT DLL ==> " + aotDll); + var assetHandle = await GameApp.Asset.LoadAssetAsync(Utility.Asset.Path.GetAOTCodePath(aotDll)); + var aotBytes = assetHandle.GetAssetObject().bytes; + RuntimeApi.LoadMetadataForAOTAssembly(aotBytes, HomologousImageMode.SuperSet); } Log.Info("结束加载AOT DLL"); Log.Info("开始加载Unity.Hotfix.dll"); - var assetHotfixDllPath = Utility.Asset.Path.GetCodePath("Unity.Hotfix.dll"); + var assetHotfixDllPath = Utility.Asset.Path.GetCodePath(HotfixName + Utility.Const.FileNameSuffix.DLL); var assetHotfixDllOperationHandle = await GameApp.Asset.LoadAssetAsync(assetHotfixDllPath); var assemblyDataHotfixDll = assetHotfixDllOperationHandle.GetAssetObject().bytes; Log.Info("开始加载Unity.Hotfix.pdb"); - var assetHotfixPdbPath = Utility.Asset.Path.GetCodePath("Unity.Hotfix.pdb"); + var assetHotfixPdbPath = Utility.Asset.Path.GetCodePath(HotfixName + Utility.Const.FileNameSuffix.PDB); var assetHotfixPdbOperationHandle = await GameApp.Asset.LoadAssetAsync(assetHotfixPdbPath); var assemblyDataHotfixPdb = assetHotfixPdbOperationHandle.GetAssetObject().bytes; Log.Info("开始加载程序集Hotfix"); - var ass = Assembly.Load(assemblyDataHotfixDll, assemblyDataHotfixPdb); + var hotfixAssembly = Assembly.Load(assemblyDataHotfixDll, assemblyDataHotfixPdb); + Run(hotfixAssembly); + } - Log.Info("加载程序集Hotfix 结束 Assembly " + ass.FullName); - var entryType = ass.GetType("Hotfix.HotfixLauncher"); + private static void Run(Assembly assembly) + { + Log.Info("加载程序集Hotfix 结束 Assembly " + assembly.FullName); + var entryType = assembly.GetType("Hotfix.HotfixLauncher"); Log.Info("加载程序集Hotfix 结束 EntryType " + entryType.FullName); var method = entryType.GetMethod("Main"); Log.Info("加载程序集Hotfix 结束 EntryType=>method " + method?.Name);