1
- using System . Linq ;
1
+ using System ;
2
+ using System . Linq ;
2
3
using System . Reflection ;
3
4
using GameFrameX . Runtime ;
4
5
using HybridCLR ;
@@ -7,35 +8,54 @@ namespace Unity.Startup.Procedure
7
8
{
8
9
public static class HotfixHelper
9
10
{
11
+ const string HotfixName = "Unity.Hotfix" ;
12
+
10
13
public static async void StartHotfix ( )
11
14
{
12
- Log . Info ( "开始加载AOT DLL" ) ;
13
- if ( ! ApplicationHelper . IsEditor )
15
+ if ( ApplicationHelper . IsEditor )
14
16
{
15
- var aotDlls = AOTGenericReferences . PatchedAOTAssemblyList . ToArray ( ) ;
16
- foreach ( var aotDll in aotDlls )
17
+ var assemblies = Utility . Assembly . GetAssemblies ( ) ;
18
+ foreach ( var assembly in assemblies )
17
19
{
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
+ }
22
25
}
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 ) ;
23
39
}
24
40
25
41
Log . Info ( "结束加载AOT DLL" ) ;
26
42
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 ) ;
28
44
var assetHotfixDllOperationHandle = await GameApp . Asset . LoadAssetAsync < UnityEngine . Object > ( assetHotfixDllPath ) ;
29
45
var assemblyDataHotfixDll = assetHotfixDllOperationHandle . GetAssetObject < UnityEngine . TextAsset > ( ) . bytes ;
30
46
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 ) ;
32
48
var assetHotfixPdbOperationHandle = await GameApp . Asset . LoadAssetAsync < UnityEngine . Object > ( assetHotfixPdbPath ) ;
33
49
var assemblyDataHotfixPdb = assetHotfixPdbOperationHandle . GetAssetObject < UnityEngine . TextAsset > ( ) . bytes ;
34
50
Log . Info ( "开始加载程序集Hotfix" ) ;
35
- var ass = Assembly . Load ( assemblyDataHotfixDll , assemblyDataHotfixPdb ) ;
51
+ var hotfixAssembly = Assembly . Load ( assemblyDataHotfixDll , assemblyDataHotfixPdb ) ;
52
+ Run ( hotfixAssembly ) ;
53
+ }
36
54
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" ) ;
39
59
Log . Info ( "加载程序集Hotfix 结束 EntryType " + entryType . FullName ) ;
40
60
var method = entryType . GetMethod ( "Main" ) ;
41
61
Log . Info ( "加载程序集Hotfix 结束 EntryType=>method " + method ? . Name ) ;
0 commit comments