Skip to content

Commit 3e57d33

Browse files
committed
Merge branch 'main' of github.com:GameFrameX/GameFrameX.Unity
2 parents c4d9818 + 1a98502 commit 3e57d33

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

Assets/Scripts/Framework/Procedure/HotfixHelper.cs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using System.Reflection;
34
using GameFrameX.Runtime;
45
using HybridCLR;
@@ -7,35 +8,54 @@ namespace Unity.Startup.Procedure
78
{
89
public static class HotfixHelper
910
{
11+
const string HotfixName = "Unity.Hotfix";
12+
1013
public static async void StartHotfix()
1114
{
12-
Log.Info("开始加载AOT DLL");
13-
if (!ApplicationHelper.IsEditor)
15+
if (ApplicationHelper.IsEditor)
1416
{
15-
var aotDlls = AOTGenericReferences.PatchedAOTAssemblyList.ToArray();
16-
foreach (var aotDll in aotDlls)
17+
var assemblies = Utility.Assembly.GetAssemblies();
18+
foreach (var assembly in assemblies)
1719
{
18-
Log.Info("开始加载AOT DLL ==> " + aotDll);
19-
var assetHandle = await GameApp.Asset.LoadAssetAsync<UnityEngine.Object>(Utility.Asset.Path.GetAOTCodePath(aotDll));
20-
var aotBytes = assetHandle.GetAssetObject<UnityEngine.TextAsset>().bytes;
21-
RuntimeApi.LoadMetadataForAOTAssembly(aotBytes, HomologousImageMode.SuperSet);
20+
if (assembly.GetName().Name.Equals(HotfixName, StringComparison.OrdinalIgnoreCase))
21+
{
22+
Run(assembly);
23+
break;
24+
}
2225
}
26+
27+
return;
28+
}
29+
30+
Log.Info("开始加载AOT DLL");
31+
32+
var aotDlls = AOTGenericReferences.PatchedAOTAssemblyList.ToArray();
33+
foreach (var aotDll in aotDlls)
34+
{
35+
Log.Info("开始加载AOT DLL ==> " + aotDll);
36+
var assetHandle = await GameApp.Asset.LoadAssetAsync<UnityEngine.Object>(Utility.Asset.Path.GetAOTCodePath(aotDll));
37+
var aotBytes = assetHandle.GetAssetObject<UnityEngine.TextAsset>().bytes;
38+
RuntimeApi.LoadMetadataForAOTAssembly(aotBytes, HomologousImageMode.SuperSet);
2339
}
2440

2541
Log.Info("结束加载AOT DLL");
2642
Log.Info("开始加载Unity.Hotfix.dll");
27-
var assetHotfixDllPath = Utility.Asset.Path.GetCodePath("Unity.Hotfix.dll");
43+
var assetHotfixDllPath = Utility.Asset.Path.GetCodePath(HotfixName + Utility.Const.FileNameSuffix.DLL);
2844
var assetHotfixDllOperationHandle = await GameApp.Asset.LoadAssetAsync<UnityEngine.Object>(assetHotfixDllPath);
2945
var assemblyDataHotfixDll = assetHotfixDllOperationHandle.GetAssetObject<UnityEngine.TextAsset>().bytes;
3046
Log.Info("开始加载Unity.Hotfix.pdb");
31-
var assetHotfixPdbPath = Utility.Asset.Path.GetCodePath("Unity.Hotfix.pdb");
47+
var assetHotfixPdbPath = Utility.Asset.Path.GetCodePath(HotfixName + Utility.Const.FileNameSuffix.PDB);
3248
var assetHotfixPdbOperationHandle = await GameApp.Asset.LoadAssetAsync<UnityEngine.Object>(assetHotfixPdbPath);
3349
var assemblyDataHotfixPdb = assetHotfixPdbOperationHandle.GetAssetObject<UnityEngine.TextAsset>().bytes;
3450
Log.Info("开始加载程序集Hotfix");
35-
var ass = Assembly.Load(assemblyDataHotfixDll, assemblyDataHotfixPdb);
51+
var hotfixAssembly = Assembly.Load(assemblyDataHotfixDll, assemblyDataHotfixPdb);
52+
Run(hotfixAssembly);
53+
}
3654

37-
Log.Info("加载程序集Hotfix 结束 Assembly " + ass.FullName);
38-
var entryType = ass.GetType("Hotfix.HotfixLauncher");
55+
private static void Run(Assembly assembly)
56+
{
57+
Log.Info("加载程序集Hotfix 结束 Assembly " + assembly.FullName);
58+
var entryType = assembly.GetType("Hotfix.HotfixLauncher");
3959
Log.Info("加载程序集Hotfix 结束 EntryType " + entryType.FullName);
4060
var method = entryType.GetMethod("Main");
4161
Log.Info("加载程序集Hotfix 结束 EntryType=>method " + method?.Name);

0 commit comments

Comments
 (0)