You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否开发无需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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:36:29