예제 #1
0
        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" }));
            }
예제 #4
0
 public void SetUp()
 {
     _codeCompileUnit = new CodeCompileUnit();
     _result          = new BuildCodeResult(_codeCompileUnit, "TypeName");
 }