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

2026更新:如何在控制台应用中用Razor渲染HTML并启用智能提示?

在控制台/类库中用Razor渲染HTML+启用.cshtml智能提示的实用方案

嘿,我完全懂你这种翻到六年前的旧方案、发现项目都没人维护的糟心感!你说已经自己实现了.razor文件的相关功能,目前靠临时方法勉强满足需求——下面我整理几个适配2026年.NET环境的原生/轻量方案,帮你把流程捋顺:

一、用官方原生能力搞定.cshtml的Intellisense和渲染

1. 先搞定.cshtml的智能提示(Intellisense)

直接修改你的类库/控制台项目的.csproj文件,加上这些配置,让VS能识别Razor语法:

<PropertyGroup>
  <!-- 改成你当前用的.NET版本,比如8.0/9.0 -->
  <RazorLangVersion>9.0</RazorLangVersion>
  <GenerateRazorTargetAssemblyAttributes>true</GenerateRazorTargetAssemblyAttributes>
</PropertyGroup>
<ItemGroup>
  <RazorCompile Include="**/*.cshtml" />
  <Content Include="**/*.cshtml" />
</ItemGroup>

保存后重新加载项目,VS的语法高亮、智能补全应该就能正常工作了,不用依赖任何第三方工具。

2. 原生渲染.cshtml内容

用官方维护的Microsoft.AspNetCore.Mvc.Razor包来实现渲染,不会出现没人维护的问题:

  • 先装NuGet包:Install-Package Microsoft.AspNetCore.Mvc.Razor
  • 然后写渲染逻辑(核心代码示例):
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.DependencyInjection;
using System.IO;
using System.Text.Encodings.Web;

// 初始化服务容器
var services = new ServiceCollection();
services.AddMvc()
        .AddRazorOptions(options =>
        {
            // 指定你的.cshtml文件所在的根目录,比如项目里的Views文件夹
            options.RootDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Views");
        });

var serviceProvider = services.BuildServiceProvider();
var razorViewEngine = serviceProvider.GetRequiredService<IRazorViewEngine>();

// 准备渲染上下文(这里可以根据需要传入模型数据)
var viewContext = new ViewContext(
    new ActionContext(serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext, new RouteData(), new ActionDescriptor()),
    new FakeView(), // 一个空的View实现,用来占位
    new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
    {
        // 这里可以放你要传给视图的模型,比如ViewData["Message"] = "Hello Razor!"
    },
    new TempDataDictionary(serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext, serviceProvider.GetRequiredService<ITempDataProvider>()),
    new StringWriter(),
    new HtmlHelperOptions()
);

// 查找并渲染指定的.cshtml文件
var viewResult = razorViewEngine.FindView(viewContext, "MyView", isMainPage: false);
if (viewResult.Success)
{
    await viewResult.View.RenderAsync(viewContext);
    var renderedHtml = ((StringWriter)viewContext.Writer).ToString();
    // 这里就拿到渲染好的HTML内容了
}

// 简单的FakeView实现,用来满足ViewContext的要求
public class FakeView : IView
{
    public string Path => string.Empty;
    public Task RenderAsync(ViewContext context) => Task.CompletedTask;
}

二、针对你已实现的.razor功能优化

既然你已经搞定了.razor文件的处理,其实可以考虑把.cshtml逐步迁移到.razor——毕竟.razor在VS里的Intellisense原生支持更好,尤其是.NET 8及以上版本:

  • 直接在项目里加.razor文件,然后在.csproj里加<RazorCompile Include="**/*.razor" />就能正常编译
  • 渲染.razor组件可以用官方的Microsoft.AspNetCore.Components包的ComponentRenderer,比第三方工具靠谱多了

临时方法的替代建议

如果你的临时方法是依赖旧第三方库或者hack式的实现,建议逐步切换到上面的官方方案,毕竟官方包会跟着.NET版本持续更新,不用担心后续维护问题。

2026更新:你提到已经实现了.razor文件的相关功能,那重点搞定.cshtml的Intellisense就行,修改csproj配置那一步就能快速解决,完全不用额外折腾第三方工具。

内容的提问来源于stack exchange,提问作者Brian Rak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:25:44