public void CompileTemplates(RepositoryNode repository) { var compilerParams = new CompilerParameters { GenerateInMemory = true, TreatWarningsAsErrors = false, GenerateExecutable = false, CompilerOptions = "/optimize" }; compilerParams.ReferencedAssemblies.AddRange(new[] { "System.dll", "mscorlib.dll", "System.Core.dll", Assembly.GetEntryAssembly()?.Location, typeof(ProtoContractAttribute).Assembly.Location }); var provider = new CSharpCodeProvider(); var usingList = string.Join("", DefaultNamespaces.Select(u => $"using {u}; ")); var codes = repository.GetFiles().Select(template => usingList + template).ToArray(); var compile = provider.CompileAssemblyFromSource(compilerParams, codes); if (compile.Errors.HasErrors) { // TODO: conveniently display on form var text = compile.Errors.Cast <CompilerError>().Aggregate("Compile error: ", (current, ce) => current + ("rn" + ce)); throw new Exception(text); } _assembly = compile.CompiledAssembly; }