Terraria.ModLoader.ModCompile.RoslynCompile C# (CSharp) Method

RoslynCompile() private static method

Invoke the Roslyn compiler via reflection to avoid a .NET 4.5 dependency
private static RoslynCompile ( CompilerParameters compileOptions, string files ) : CompilerResults
compileOptions System.CodeDom.Compiler.CompilerParameters
files string
return System.CodeDom.Compiler.CompilerResults
        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;
        }