1- using System . Linq ;
1+ using System ;
2+ using System . Linq ;
23using System . Reflection ;
34using GameFrameX . Runtime ;
45using 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