using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.Loader; namespace ET { public class CodeLoader: Singleton { private AssemblyLoadContext assemblyLoadContext; private Assembly model; public void Start() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { 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 types = AssemblyHelper.GetAssemblyTypes(Assembly.GetEntryAssembly(), typeof(Init).Assembly, typeof (Game).Assembly, this.model, hotfixAssembly); EventSystem.Instance.Add(types); } } }