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 }); } } }