1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Reflection;
- using System.Runtime.Loader;
- namespace ET
- {
- public class CodeLoader: Singleton<CodeLoader>
- {
- private AssemblyLoadContext assemblyLoadContext;
- private Assembly model;
- public void Start()
- {
- Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
- foreach (Assembly assembly in assemblies)
- {
- Log.Debug($"assembly: {assembly.GetName().Name}");
- if (assembly.GetName().Name == "Model")
- {
- this.model = assembly;
- break;
- }
- }
- this.LoadHotfix();
- IStaticMethod start = new StaticMethod(this.model, "ET.Entry", "Start");
- start.Run();
- }
- public void LoadHotfix()
- {
- assemblyLoadContext?.Unload();
- GC.Collect();
- assemblyLoadContext = new AssemblyLoadContext("Hotfix", true);
- byte[] dllBytes = File.ReadAllBytes("./Hotfix.dll");
- byte[] pdbBytes = File.ReadAllBytes("./Hotfix.pdb");
- Assembly hotfixAssembly = assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
- Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(Assembly.GetEntryAssembly(), typeof(Init).Assembly, typeof (Game).Assembly, this.model, hotfixAssembly);
- EventSystem.Instance.Add(types);
- }
- }
- }
|