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

.NET 8网站编译与Razor视图部署:为何需运行时编译包?

关于.NET 8 Razor视图找不到问题的解答

一、为什么那些操作能解决视图找不到的问题?

在.NET 6及以后的版本(包括.NET 8)中,Razor视图默认采用预编译模式:项目编译时,.cshtml文件会被编译成程序集内嵌代码,部署时不需要附带物理视图文件,运行时直接从程序集加载视图。

你遇到的找不到视图的问题,大概率是视图预编译过程出现异常(比如视图语法错误导致预编译失败、项目配置意外跳过了视图预编译等)。而你做的这几步操作,本质是切换到运行时编译模式:

  • 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包:提供运行时编译Razor视图的核心能力
  • 在Startup.cs(或.NET 6+的Program.cs顶级语句中)添加.AddRazorRuntimeCompilation():启用MVC的运行时编译特性
  • 在.csproj中添加<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>:确保发布项目时,把.cshtml物理文件复制到发布目录,让运行时能找到并编译这些文件

这种模式绕开了预编译的问题,直接读取物理视图文件,因此能解决找不到视图的报错。

二、不使用RuntimeCompilation包时,部署Razor视图的标准方式

默认的标准方式就是依赖Razor预编译,不需要额外安装包,只需确保以下几点:

  • 视图文件的生成操作保持默认的Content(右键视图文件→属性→生成操作,默认就是这个值,无需修改)
  • 项目配置中没有禁用预编译:不要在.csproj中添加类似<RazorCompileOnBuild>false</RazorCompileOnBuild>的配置
  • 正常发布项目:使用dotnet publish命令或者Visual Studio的发布功能,预编译后的视图会被打包到主程序集或单独的[你的项目名].Views.dll中,随程序一起部署

此时运行时会直接从程序集加载预编译后的视图,不需要物理.cshtml文件存在于服务器上。如果出现视图找不到的问题,优先排查:

  • 视图是否存在语法错误(预编译失败会导致视图未被嵌入程序集)
  • 发布过程是否完整,有没有遗漏预编译生成的视图程序集
  • 项目中是否有自定义的视图查找逻辑,干扰了默认的视图定位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:43:13