private static CompilerResults RoslynCompile(CompilerParameters compileOptions, string[] files) {
var terrariaDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var modCompileDir = Path.Combine(terrariaDir, "ModCompile");
var asm = Assembly.LoadFile(Path.Combine(modCompileDir, "RoslynWrapper.dll"));
AppDomain.CurrentDomain.AssemblyResolve += (o, args) => {
var name = new AssemblyName(args.Name).Name;
var f = Path.Combine(modCompileDir, name + ".dll");
return File.Exists(f) ? Assembly.LoadFile(f) : null;
};
var res = (CompilerResults) asm.GetType("Terraria.ModLoader.RoslynWrapper").GetMethod("Compile")
.Invoke(null, new object[] {compileOptions, files});
if (!res.Errors.HasErrors && compileOptions.IncludeDebugInformation)
asm.GetType("Terraria.ModLoader.RoslynPdbFixer").GetMethod("Fix")
.Invoke(null, new object[] { compileOptions.OutputAssembly });
return res;
}