/// <summary> /// compiles a template into an assembly /// </summary> /// <param name="assemblies">the assemblies to refernce</param> /// <param name="namespaces">the namespaces to add to the compiled template</param> /// <param name="parameternames">the names of the parameters to be declared in the assembly (these can be used inside the template)</param> /// <returns>the comiled assembly</returns> public void Compile(string[] assemblies, string[] namespaces, TemplateParameters parameters) { Assemblies = assemblies; Namespaces = namespaces; Parameters = parameters; Sections = Parser.ParsePage(Page); CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters compilerparams = new System.CodeDom.Compiler.CompilerParameters(); compilerparams.GenerateInMemory = true; compilerparams.GenerateExecutable = false; // setup references assemblies if (assemblies != null) { foreach (string assembly in assemblies) { compilerparams.ReferencedAssemblies.Add(assembly); } } foreach (Section s in Sections) { if (s.Type == SectionType.Directive) { if (s.Values.Directive.ToLower() == "assembly") { string assembly; if (s.Values.TryGetValue("name", out assembly)) { compilerparams.ReferencedAssemblies.Add(assembly + ".dll"); } } } } string source = Sections.ExtractSource(namespaces, parameters); if (source.Length > 0) { Result = provider.CompileAssemblyFromSource(compilerparams, new string[] { source }); Console.WriteLine(source); } }
/// <summary> /// generates the source code to be executed from the template /// </summary> /// <returns>the generated source code</returns> public string GenerateSource() { return(Sections.ExtractSource(Namespaces, Parameters)); }