示例#1
0
        public static ParsedTemplate parse(string sourceFilename, string cshtmlContent, string effectiveTemplateClassName, Type modelType)
        {
            var csCodeLanguage = new CSharpRazorCodeLanguage();
            var templateHost = new RazorEngineHost(csCodeLanguage, () => new HtmlMarkupParser());

            var concreteBaseClassType = getBaseClassTypeFromModel(modelType);
            templateHost.DefaultBaseClass = concreteBaseClassType.FullName;

            var templateEngine = new RazorTemplateEngine(templateHost);

            var trimmedcshtmlContent = HeaderLines.trim(cshtmlContent);

            GeneratorResults res;
            using (var input = new StringReader(trimmedcshtmlContent))
            {
                res = templateEngine.GenerateCode(input, effectiveTemplateClassName, GeneratedTemplateNamespace, sourceFilename);
            }

            if (!res.Success)
                throw new Exception("Failed to generate code");

            var compileUnit = res.GeneratedCode;
            var fullyQualifiedClassName = GeneratedTemplateNamespace + "." + effectiveTemplateClassName;

            return new ParsedTemplate(fullyQualifiedClassName, compileUnit);
        }
示例#2
0
        private static RazorTemplateEngine CreateRazorTemplateEngine()
        {
            var language = new CSharpRazorCodeLanguage();
            var host = new SimpleRazorEngineHost(language);
            var engine = new RazorTemplateEngine(host);

            return engine;
        }
示例#3
0
        public static RazorTemplateEngine CreateEngine()
        {
            var language = new CSharpRazorCodeLanguage();
            var host = new RazorEngineHost(language);
            host.DefaultBaseClass = typeof(RazorTemplate<Context>).FullName;
            host.DefaultNamespace = "RazorOutput";
            host.DefaultClassName = "Template";
            host.NamespaceImports.Add("System");
            host.NamespaceImports.Add("System.IO");
            //host.NamespaceImports.Add("System.Linq");
           // host.NamespaceImports.Add("System.Text.RegularExpressions");

            var engine = new RazorTemplateEngine(host);
            return engine;
        }
 private static RazorTemplateEngine CreateRazorTemplateEngine()
 {
     var language = new CSharpRazorCodeLanguage();
     var host = new SimpleRazorEngineHost(language)
                    {
                        DefaultBaseClass = "SimpleTemplateBase",
                        DefaultClassName = "SimpleView",
                        DefaultNamespace = "SimpleRazor",
                    };
     foreach (string nameSpace in DefaultNamespaceImports)
     {
         host.NamespaceImports.Add(nameSpace);
     }
     var engine = new RazorTemplateEngine(host);
     return engine;
 }
示例#5
0
        private DynamicContentGeneratorBase CreateRazorInstance(string templateText)
        {
            const string dynamicallyGeneratedClassName = "DynamicContentTemplate";
            const string namespaceForDynamicClasses = "InMemory.Razor";
            const string dynamicClassFullName = namespaceForDynamicClasses + "." + dynamicallyGeneratedClassName;

            var language = new CSharpRazorCodeLanguage();
            var host = new RazorEngineHost(language)
                {
                    DefaultBaseClass = typeof (DynamicContentGeneratorBase).FullName,
                    DefaultClassName = dynamicallyGeneratedClassName,
                    DefaultNamespace = namespaceForDynamicClasses,
                };
            host.NamespaceImports.Add("System");
            host.NamespaceImports.Add("System.Dynamic");
            host.NamespaceImports.Add("System.Text");
            host.NamespaceImports.Add("System.Linq");
            host.NamespaceImports.Add("System.Collections.Generic");

            if (NamespacesImports.Count != 0)
            {
                foreach (var nameSpaceItem in NamespacesImports)
                        host.NamespaceImports.Add(nameSpaceItem);

            }

            var engine = new RazorTemplateEngine(host);
            var tr = new StringReader(templateText);

            GeneratorResults razorTemplate = engine.GenerateCode(tr);

            if (razorTemplate.ParserErrors.Any())
            {
                throw new Exception(razorTemplate.ParserErrors.Aggregate("", (current, error) => current + Environment.NewLine + error.Location + ":" + error.Message));
            }

            var compiledAssembly = CreateCompiledAssemblyFor(razorTemplate.GeneratedCode);

            return (DynamicContentGeneratorBase) compiledAssembly.CreateInstance(dynamicClassFullName);
        }
示例#6
0
        // TODO: Cache compiled dynamic assembly for performance reasons
        public static string GetContent(string template, dynamic model)
        {
            if (string.IsNullOrEmpty(template)) { return string.Empty; }

            const string dynamicallyGeneratedClassName = "DynamicContentTemplate";
            const string namespaceForDynamicClasses = "dyn";
            const string dynamicClassFullName = namespaceForDynamicClasses + "." + dynamicallyGeneratedClassName;

            var language = new CSharpRazorCodeLanguage();
            var host = new RazorEngineHost(language)
            {
                DefaultBaseClass = typeof(DynamicContentGeneratorBase).FullName,
                DefaultClassName = dynamicallyGeneratedClassName,
                DefaultNamespace = namespaceForDynamicClasses,
            };
            host.NamespaceImports.Add("System");
            host.NamespaceImports.Add("System.Dynamic");
            host.NamespaceImports.Add("System.Text");
            var engine = new RazorTemplateEngine(host);

            var tr = new StringReader(template); // here is where the string come in place
            GeneratorResults razorTemplate = engine.GenerateCode(tr);

            var compilerParameters = new CompilerParameters();
            AppDomain.CurrentDomain.GetAssemblies()
                .Where(a => !a.IsDynamic)
                .ToList()
                .ForEach(a => compilerParameters.ReferencedAssemblies.Add(a.Location));
            compilerParameters.GenerateInMemory = true;

            CompilerResults compilerResults = new CSharpCodeProvider().CompileAssemblyFromDom(compilerParameters, razorTemplate.GeneratedCode);
            if (compilerResults.Errors.Count > 0)
            {
                return "Error: " + string.Join("\r\nError: ", compilerResults.Errors.Cast<CompilerError>().Select(e => e.ErrorText));
            }
            var compiledAssembly = compilerResults.CompiledAssembly;

            var templateInstance = (DynamicContentGeneratorBase)compiledAssembly.CreateInstance(dynamicClassFullName);

            templateInstance.Model = model;

            try
            {
                return templateInstance.GetContent();
            }
            catch(Exception e)
            {
                return "Error: " + e.Message;
            }
        }
示例#7
0
 public RazorViewCompiler()
 {
     Language = new CSharpRazorCodeLanguage();
     ClassName = "GeneratedView";
     Namespace = "Manos.Mvc";
 }