能否开发无需Web服务器、基于Razor模板引擎的CLI HTML生成工具?
用Razor模板引擎开发无Web服务器的CLI HTML生成工具
完全可以实现,Razor引擎本身并非只能绑定ASP.NET或Blazor这类Web环境,完全可以脱离Web服务器单独用于CLI工具生成HTML文件。下面是具体的实现方案:
可行方案与步骤
1. 选择适配的类库
推荐两种主流方案:
- RazorLight:专为非Web环境设计的轻量级Razor模板引擎,使用简单
- Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation:官方提供的运行时编译包,兼容标准Razor语法
2. 配置项目依赖
创建一个.NET Console项目,在项目文件中添加对应NuGet包引用:
- 若用RazorLight:
<PackageReference Include="RazorLight" Version="2.0.0" />
- 若用官方RuntimeCompilation:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.0" />
3. 编写Razor模板
在项目目录下创建模板文件(比如命名为UserTemplate.cshtml),示例内容:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>@Model.PageTitle</title> </head> <body> <div class="container"> <h2>用户信息</h2> <p>姓名:@Model.UserName</p> <p>生成时间:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</p> </div> </body> </html>
4. CLI核心代码实现
基于RazorLight的示例:
using RazorLight; // 初始化Razor引擎 var engine = new RazorLightEngineBuilder() .UseFileSystemProject(Directory.GetCurrentDirectory()) .UseMemoryCachingProvider() .Build(); // 准备模板数据 var templateModel = new { PageTitle = "CLI生成的用户页面", UserName = "张三" }; // 渲染模板 var htmlContent = await engine.CompileRenderAsync("UserTemplate.cshtml", templateModel); // 写入HTML文件 await File.WriteAllTextAsync("generated_user.html", htmlContent); Console.WriteLine("HTML文件已成功生成!");
基于官方RuntimeCompilation的示例:
using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.Extensions.DependencyInjection; // 配置服务容器 var services = new ServiceCollection(); services.AddMvc().AddRazorRuntimeCompilation(); var serviceProvider = services.BuildServiceProvider(); // 查找指定模板 var razorEngine = serviceProvider.GetRequiredService<IRazorViewEngine>(); var viewResult = razorEngine.FindView(null, "UserTemplate", isMainPage: true); if (!viewResult.Success) { Console.WriteLine("未找到指定的Razor模板文件"); return; } // 创建视图上下文(模拟必要的Web环境上下文,无需真实服务器) var httpContext = new DefaultHttpContext { RequestServices = serviceProvider }; var viewContext = new ViewContext( new ActionContext(httpContext, new RouteData(), new ControllerActionDescriptor()), viewResult.View, new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()) { Model = new { PageTitle = "CLI生成的用户页面", UserName = "张三" } }, new TempDataDictionary(httpContext, serviceProvider.GetRequiredService<ITempDataProvider>()), new StringWriter(), new HtmlHelperOptions() ); // 渲染并获取HTML内容 await viewResult.View.RenderAsync(viewContext); var htmlContent = ((StringWriter)viewContext.Writer).ToString(); // 写入文件 await File.WriteAllTextAsync("generated_user.html", htmlContent); Console.WriteLine("HTML文件已成功生成!");
5. 运行工具
直接编译并运行控制台项目,即可在项目目录下生成目标HTML文件,全程无需启动任何Web服务器。
内容的提问来源于stack exchange,提问作者mat
相关产品推荐
相关产品推荐

