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); }
private static RazorTemplateEngine CreateRazorTemplateEngine() { var language = new CSharpRazorCodeLanguage(); var host = new SimpleRazorEngineHost(language); var engine = new RazorTemplateEngine(host); return engine; }
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; }
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); }
// 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; } }
public RazorViewCompiler() { Language = new CSharpRazorCodeLanguage(); ClassName = "GeneratedView"; Namespace = "Manos.Mvc"; }