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

ASP.NET Core应用编译发布后能否新增Razor视图页面?

ASP.NET Core 发布后动态创建Razor视图的实现方案

核心结论

默认发布的ASP.NET Core应用无法直接新增Razor视图生效,原因是默认开启了Razor预编译:发布时所有.cshtml文件会被编译进程序集,运行时不会读取磁盘上的视图源文件。dotnet new page/dotnet new view是开发阶段的脚手架命令,仅能生成源文件,对已发布的预编译应用没有效果。


可落地的实现步骤

  • 第一步:调整项目配置,开启运行时视图编译
    1. 编辑项目.csproj文件,在<PropertyGroup>节点下添加配置,关闭发布时的Razor预编译:
      <RazorCompileOnPublish>false</RazorCompileOnPublish>
      
    2. 安装NuGet包:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    3. 在Program.cs中启用运行时编译,MVC项目示例:
      builder.Services.AddControllersWithViews()
          .AddRazorRuntimeCompilation();
      
      Razor Pages项目示例:
      builder.Services.AddRazorPages()
          .AddRazorRuntimeCompilation();
      
  • 第二步:动态生成视图文件
    不需要调用dotnet new相关CLI命令,你可以直接在Web后端代码中,按照业务需求生成Razor语法的文本内容,写入到发布目录对应的视图文件夹即可:
    • Razor Pages项目写入到Pages目录下,后缀为.cshtml
    • MVC项目写入到Views/对应控制器名目录下,后缀为.cshtml
      写入完成后无需重启应用,运行时编译组件会自动检测到新文件并编译生效。

关键注意事项

Razor视图支持直接编写服务端C#代码,一旦被恶意用户篡改或构造恶意内容,会直接导致远程代码执行漏洞,风险极高:

  • 禁止直接允许用户自由输入所有视图内容,建议用固定模板填充参数的方式生成视图
  • 必须对操作人做严格的权限校验,仅允许可信人员操作视图创建功能
  • 可对生成的视图内容做语法校验,拦截@开头的C#代码块、@inject/@functions等危险语法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:04