quantum-space-buddies/MirrorWeaver/Program.cs
2022-01-31 19:14:02 -08:00

59 lines
1.3 KiB
C#

using Mirror.Weaver;
using Mono.Cecil;
using System;
using System.IO;
namespace MirrorWeaver
{
public class ConsoleLogger : Logger
{
public void Warning(string message) => Warning(message, null);
public void Warning(string message, MemberReference mr)
{
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);
}
}
public static class Program
{
public static void Main(string[] args)
{
var qsbDll = Path.GetFullPath(args[0]);
var unityDir = Path.GetFullPath(args[1]);
var qsbDir = Path.GetDirectoryName(qsbDll)!;
var resolver = new DefaultAssemblyResolver();
resolver.AddSearchDirectory(qsbDir);
resolver.AddSearchDirectory(unityDir);
var assembly = AssemblyDefinition.ReadAssembly(qsbDll, new ReaderParameters
{
ReadWrite = true,
ReadSymbols = true,
AssemblyResolver = resolver
});
var log = new ConsoleLogger();
var weaver = new Weaver(log);
if (!weaver.Weave(assembly, resolver, out _))
{
Environment.Exit(1);
}
assembly.Write(new WriterParameters { WriteSymbols = true });
}
}
}