80 lines
1.8 KiB
C#
Raw Normal View History

2021-12-28 01:48:33 -08:00
using Mirror.Weaver;
using Mono.Cecil;
using System;
using System.IO;
2021-12-31 23:17:58 -08:00
using System.Reflection;
2021-12-28 01:48:33 -08:00
namespace MirrorWeaver
2021-12-27 21:56:00 -08:00
{
2021-12-28 05:59:54 -08:00
public class ConsoleLogger : Logger
2021-12-27 21:56:00 -08:00
{
2021-12-28 01:48:33 -08:00
public void Warning(string message) => Warning(message, null);
public void Warning(string message, MemberReference mr)
2021-12-27 21:56:00 -08:00
{
2021-12-28 01:48:33 -08:00
if (mr != null) message = $"{message} (at {mr})";
Console.WriteLine(message);
}
public void Error(string message) => Error(message, null);
public void Error(string message, MemberReference mr)
{
if (mr != null) message = $"{message} (at {mr})";
Console.Error.WriteLine(message);
}
}
2021-12-28 04:57:24 -08:00
public static class Program
2021-12-28 01:48:33 -08:00
{
2021-12-28 04:57:24 -08:00
public static void Main(string[] args)
2021-12-28 01:48:33 -08:00
{
2021-12-31 23:17:58 -08:00
var qsbDll = Path.GetFullPath(args[0]);
var gameDir = Path.GetFullPath(args[1]);
2021-12-28 01:48:33 -08:00
2021-12-31 23:17:58 -08:00
var qsbDir = Path.GetDirectoryName(qsbDll)!;
2021-12-28 05:59:54 -08:00
var managedDir = Path.Combine(gameDir, "OuterWilds_Data", "Managed");
2021-12-31 23:17:58 -08:00
AppDomain.CurrentDomain.AssemblyResolve += (_, eventArgs) =>
{
var name = new AssemblyName(eventArgs.Name).Name + ".dll";
2021-12-28 05:59:54 -08:00
2021-12-31 23:17:58 -08:00
var path = Path.Combine(qsbDir, name);
if (File.Exists(path))
{
return Assembly.LoadFile(path);
}
path = Path.Combine(managedDir, name);
if (File.Exists(path))
{
return Assembly.LoadFile(path);
}
return null;
};
var resolver = new DefaultAssemblyResolver();
resolver.AddSearchDirectory(qsbDir);
resolver.AddSearchDirectory(managedDir);
var assembly = AssemblyDefinition.ReadAssembly(qsbDll, new ReaderParameters
2021-12-28 01:48:33 -08:00
{
2021-12-31 23:17:58 -08:00
ReadWrite = true,
ReadSymbols = true,
AssemblyResolver = resolver
});
var log = new ConsoleLogger();
var weaver = new Weaver(log);
2022-01-13 18:46:52 -08:00
if (!weaver.Weave(assembly, resolver, out _))
{
2022-01-13 19:19:45 -08:00
Environment.Exit(1);
2022-01-13 18:46:52 -08:00
}
2021-12-28 01:48:33 -08:00
2021-12-31 23:17:58 -08:00
assembly.Write(new WriterParameters { WriteSymbols = true });
2021-12-27 21:56:00 -08:00
}
}
}