-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathAssemblyLoadingFreePatch.cs
More file actions
35 lines (29 loc) · 1.06 KB
/
AssemblyLoadingFreePatch.cs
File metadata and controls
35 lines (29 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System.IO;
using System.Linq;
using System.Reflection;
using HarmonyLib;
using Mono.Cecil;
using MonoMod.Utils;
using Verse;
namespace Prepatcher;
public static class AssemblyLoadingFreePatch
{
[FreePatch]
static void ReplaceAssemblyLoading(ModuleDefinition module)
{
var type = module.GetType($"{nameof(Verse)}.{nameof(ModAssemblyHandler)}");
var method = type.FindMethod(nameof(ModAssemblyHandler.ReloadAll));
foreach (var inst in method.Body.Instructions)
if (inst.Operand is MethodReference { Name: nameof(Assembly.LoadFrom) })
inst.Operand = module.ImportReference(typeof(AssemblyLoadingFreePatch).GetMethod(nameof(LoadFrom)));
}
public static Assembly LoadFrom(string filePath)
{
var asmName = AssemblyName.GetAssemblyName(filePath);
var asmWithName = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.GetName().Name == asmName.Name);
if (asmWithName != null)
return asmWithName;
return Assembly.LoadFrom(filePath);
}
}