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

ASP.NET Core 5非Web应用类库项目引用Razor的正确方法咨询

非Web项目.NET 5+引用Razor的正确方案

针对类库、控制台等非Web场景需要使用Razor渲染功能的需求,有两种经过验证的可行方案:

方案1:官方原生方案(推荐,兼容原有模板逻辑)

.NET 5+ 允许非Web项目直接引用ASP.NET Core共享框架,不会额外引入Web服务相关的冗余组件,原有Razor逻辑几乎不需要修改:

  1. 修改类库项目的.csproj文件配置:
    • 将项目SDK修改为Microsoft.NET.Sdk.Razor
    • 移除原有两个Microsoft.AspNetCore.Mvc.Razor、Microsoft.AspNetCore.Mvc.ViewFeatures的包引用
    • 添加ASP.NET Core框架引用,保留编译上下文配置
      完整示例配置片段:
    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <PreserveCompilationContext>true</PreserveCompilationContext>
      </PropertyGroup>
      <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
      </ItemGroup>
    </Project>
    
  2. 注册Razor相关服务,在你类库的初始化逻辑或使用方的依赖注入配置中添加如下代码:
    services.AddMvcCore()
            .AddRazorViewEngine();
    
  3. 后续使用Razor渲染HTML的逻辑和原有.NET Framework 4.8时期的写法完全一致。

方案2:轻量级第三方库方案(无ASP.NET Core依赖)

如果不想引入ASP.NET Core共享框架,可以使用专门封装的Razor渲染库,无需额外配置框架引用:

  1. 安装NuGet包 RazorLight
  2. 直接调用API渲染模板,示例代码:
    var engine = new RazorLightEngineBuilder()
        .UseEmbeddedResourcesProject(typeof(YourClass).Assembly)
        .UseMemoryCachingProvider()
        .Build();
    
    string html = await engine.CompileRenderAsync("TemplateName.cshtml", model);
    

注:方案1的兼容性更好,和原有.NET Framework时期的Razor模板语法完全兼容,迁移成本更低;方案2更轻量化,适合仅需要简单Razor渲染的场景。

内容的提问来源于stack exchange,提问作者Fabian Schmied

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:33:03