public virtual RazorLightEngine Build() { var options = new RazorLightOptions(); if (namespaces != null) { options.Namespaces = namespaces; } if (dynamicTemplates != null) { options.DynamicTemplates = dynamicTemplates; } if (metadataReferences != null) { options.AdditionalMetadataReferences = metadataReferences; } if (prerenderCallbacks != null) { options.PreRenderCallbacks = prerenderCallbacks; } var sourceGenerator = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, options.Namespaces); var metadataReferenceManager = new DefaultMetadataReferenceManager(options.AdditionalMetadataReferences); var assembly = operatingAssembly ?? Assembly.GetEntryAssembly(); var compiler = new RoslynCompilationService(metadataReferenceManager, assembly); var templateFactoryProvider = new TemplateFactoryProvider(sourceGenerator, compiler, options); return(new RazorLightEngine(options, templateFactoryProvider, cachingProvider)); }
private TemplateFactoryProvider GetProvider() { var sourceGenerator = new RazorSourceGenerator(DefaultRazorEngine.Instance, project); var metadataReferences = new DefaultMetadataReferenceManager(); var compiler = new RoslynCompilationService(metadataReferences, Assembly.GetEntryAssembly()); var provider = new TemplateFactoryProvider(sourceGenerator, compiler, new RazorLightOptions()); return(provider); }
private int Execute() { if (!ParseArguments()) { return(1); } var engine = new EngineFactory().ForFileSystem(Options.ContentRootOption.Value()); factoryProvider = (TemplateFactoryProvider)engine.TemplateFactoryProvider; compiler = factoryProvider.Compiler; ViewCompilationInfo[] results = GenerateCode(); bool success = true; foreach (var result in results) { if (result.CSharpDocument.Diagnostics.Count > 0) { success = false; foreach (var error in result.CSharpDocument.Diagnostics) { Application.Error.WriteLine($"{result.TemplateFileInfo.FullPath} ({error.Span.LineIndex}): {error.GetMessage()}"); } } } if (!success) { return(1); } string precompileAssemblyName = $"{Options.ApplicationName}_Precompiled"; CSharpCompilation compilation = CompileViews(results, precompileAssemblyName); string assemblyPath = Path.Combine(Options.OutputPath, precompileAssemblyName + ".dll"); EmitResult emitResult = EmitAssembly( compilation, compiler.EmitOptions, assemblyPath); if (!emitResult.Success) { foreach (var diagnostic in emitResult.Diagnostics) { Application.Error.WriteLine(CSharpDiagnosticFormatter.Instance.Format(diagnostic)); } return(1); } return(0); }
/// <summary> ///Creates RazorLightEngine with a custom RazorLightProject /// </summary> /// <param name="project">The project</param> /// <returns>Instance of RazorLightEngine</returns> public virtual RazorLightEngine Create(RazorLightProject project, RazorLightOptions options = null) { var razorOptions = options ?? new RazorLightOptions(); var sourceGenerator = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, razorOptions.Namespaces); var metadataReferenceManager = new DefaultMetadataReferenceManager(razorOptions.AdditionalMetadataReferences); var compiler = new RoslynCompilationService(metadataReferenceManager, Assembly.GetEntryAssembly()); var templateFactoryProvider = new TemplateFactoryProvider(sourceGenerator, compiler, razorOptions); ICachingProvider cacheProvider = new MemoryCachingProvider(); return(new RazorLightEngine(razorOptions, templateFactoryProvider, cacheProvider)); }
public void Ensure_FactoryReturnsValidTemplateType() { string templateKey = "testKey"; var templateFactoryProvider = new TemplateFactoryProvider(); var descriptor = new CompiledTemplateDescriptor { TemplateAttribute = new RazorLightTemplateAttribute(templateKey, typeof(TestFactoryClass)), TemplateKey = templateKey }; Func <ITemplatePage> result = templateFactoryProvider.CreateFactory(descriptor); Assert.NotNull(result); Assert.IsAssignableFrom <TemplatePage>(result()); }
public virtual RazorLightEngine Build() { options = options ?? new RazorLightOptions(); project = project ?? new NoRazorProject(); if (namespaces != null) { if (namespaces.Count > 0 && options.Namespaces.Count > 0) { ThrowIfHasBeenSetExplicitly(nameof(namespaces)); } options.Namespaces = namespaces; } if (dynamicTemplates != null) { if (dynamicTemplates.Count > 0 && options.DynamicTemplates.Count > 0) { ThrowIfHasBeenSetExplicitly(nameof(dynamicTemplates)); } options.DynamicTemplates = dynamicTemplates; } if (metadataReferences != null) { if (metadataReferences.Count > 0 && options.AdditionalMetadataReferences.Count > 0) { ThrowIfHasBeenSetExplicitly(nameof(metadataReferences)); } options.AdditionalMetadataReferences = metadataReferences; } if (excludedAssemblies != null) { if (excludedAssemblies.Count > 0 && options.ExcludedAssemblies.Count > 0) { ThrowIfHasBeenSetExplicitly(nameof(excludedAssemblies)); } options.ExcludedAssemblies = excludedAssemblies; } if (prerenderCallbacks != null) { if (prerenderCallbacks.Count > 0 && options.PreRenderCallbacks.Count > 0) { ThrowIfHasBeenSetExplicitly(nameof(prerenderCallbacks)); } options.PreRenderCallbacks = prerenderCallbacks; } if (cachingProvider != null) { if (options.CachingProvider != null) { ThrowIfHasBeenSetExplicitly(nameof(cachingProvider)); } options.CachingProvider = cachingProvider; } if (disableEncoding.HasValue) { if (options.DisableEncoding != null) { ThrowIfHasBeenSetExplicitly(nameof(disableEncoding)); } options.DisableEncoding = options.DisableEncoding ?? disableEncoding ?? false; } else { if (!options.DisableEncoding.HasValue) { options.DisableEncoding = false; } } if (enableDebugMode.HasValue && options.EnableDebugMode.HasValue) { ThrowIfHasBeenSetExplicitly(nameof(enableDebugMode)); } else { options.EnableDebugMode = options.EnableDebugMode ?? enableDebugMode ?? false; } var metadataReferenceManager = new DefaultMetadataReferenceManager(options.AdditionalMetadataReferences, options.ExcludedAssemblies); var assembly = operatingAssembly ?? Assembly.GetEntryAssembly(); var compiler = new RoslynCompilationService(metadataReferenceManager, assembly); var sourceGenerator = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, options.Namespaces); var templateCompiler = new RazorTemplateCompiler(sourceGenerator, compiler, project, options); var templateFactoryProvider = new TemplateFactoryProvider(); var engineHandler = new EngineHandler(options, templateCompiler, templateFactoryProvider, cachingProvider); return(new RazorLightEngine(engineHandler)); }