public Type Compile <TTemplate>( string templateContents, string className, ITemplateCodeBuilder templateCodeBuilder, CodeDomProvider codeDomProvider, Action <CodeTypeDeclaration> typeConfigurationDelegate, IEnumerable <string> namespaceImports) where TTemplate : ITemplate { templateContents.ThrowIfNull("templateContents"); className.ThrowIfNull("className"); templateCodeBuilder.ThrowIfNull("templateCodeBuilder"); codeDomProvider.ThrowIfNull("codeDomProvider"); namespaceImports.ThrowIfNull("namespaceImports"); BuildCodeResult buildCodeResult = templateCodeBuilder.BuildCode <TTemplate>(templateContents, className, typeConfigurationDelegate, namespaceImports); var parameters = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false, IncludeDebugInformation = false, CompilerOptions = "/target:library /optimize" }; string[] assemblyLocations = _referenceResolver.ResolveAssemblyLocations().ToArray(); parameters.ReferencedAssemblies.AddRange(assemblyLocations); CompilerResults compilerResults = codeDomProvider.CompileAssemblyFromDom(parameters, buildCodeResult.CompileUnit); if (compilerResults.Errors != null && compilerResults.Errors.Count > 0) { throw new TemplateCompilationException(compilerResults.Errors); } return(compilerResults.CompiledAssembly.GetType(buildCodeResult.TypeFullName)); }
public void Must_build_correct_type_name() { BuildCodeResult result = _builder.BuildCode <ITemplate>("Template", "ClassName", null); Assert.That(result.TypeFullName, Is.EqualTo("Junior.Route.ViewEngines.Razor.TemplateCodeBuilders.DynamicTemplates.ClassName")); }
public void Must_compile_correct_namespaces() { BuildCodeResult result = _builder.BuildCode <ITemplate>("Template", "ClassName", null); Assert.That(result.CompileUnit.Namespaces.Cast <CodeNamespace>().Select(arg => arg.Name), Is.EquivalentTo(new[] { "Junior.Route.ViewEngines.Razor.TemplateCodeBuilders.DynamicTemplates" })); }
public void SetUp() { _codeCompileUnit = new CodeCompileUnit(); _result = new BuildCodeResult(_codeCompileUnit, "TypeName"); }