示例#1
0
        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;
        }