/// <summary> /// Compiles the string cshtml template into a cs string /// </summary> /// <param name="className">The name of the compiled class.</param> /// <param name="template">The template to compile.</param> /// <param name="modelType">[Optional] The model type.</param> /// <param name="baseTypeName">[Optional] Base type for the template. To be used if the model type is /// in an unreferenced assembly.</param> /// <returns>The results of compilation.</returns> public string GetCode(string className, string template, Type modelType = null, string baseTypeName = null, string outputNamespace = null) { if (className == null) { className = Regex.Replace(Guid.NewGuid().ToString("N"), @"[^A-Za-z]*", ""); } var service = languageProvider.CreateLanguageService(); var codeDom = languageProvider.CreateCodeDomProvider(); var host = new RazorEngineHost(service); host.GeneratedClassContext = new GeneratedClassContext("Execute", "Write", "WriteLiteral", "WriteTo", "WriteLiteralTo", "RazorEngine.Templating.TemplateWriter"); var generator = service.CreateCodeGenerator(className, outputNamespace ?? "RazorEngine.Dynamic", null, host); var codeParser = service.CreateCodeParser(); var parser = new RazorParser(codeParser, markupParser); AddNamespaceImports(generator.GeneratedNamespace); string baseType = baseTypeName; if (baseTypeName == null) { baseType = GetBaseTypeDeclaration(languageProvider, modelType, templateBaseType); } generator.GeneratedClass.BaseTypes.Add(baseType); if ((modelType != null) && IsAnonymousType(modelType)) { generator.GeneratedClass.CustomAttributes.Add( new CodeAttributeDeclaration( new CodeTypeReference(typeof(HasDynamicModelAttribute)))); } ParseTemplate(template, parser, generator); var builder = new StringBuilder(); GenerateCode(codeDom, generator, builder); return(builder.ToString()); }