.NET Core MVC升级VS2022后视图丢失,发布IIS失效问题求助
.NET Core MVC发布IIS后Razor运行时编译失效的解决办法
问题背景
升级Visual Studio 2022至17.7.5版本后,.NET Core MVC项目出现视图找不到错误:
An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Show' was not found. The following locations were searched: /Views/Account/Show.cshtml /Views/Shared/Show.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable originalLocations)
本地通过添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包并启用运行时编译后恢复正常,但发布到IIS后网站无法运行。
解决办法
1. 区分环境启用运行时编译
生产环境优先使用预编译视图,仅在开发环境启用运行时编译,避免IIS下的依赖问题。修改Program.cs:
var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddControllersWithViews(); // 仅开发环境启用运行时编译 if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
2. 若需生产环境启用运行时编译,确保视图文件被发布
如果业务需求必须在生产环境使用运行时编译,需保证.cshtml文件被包含到发布包中:
- 方式一:右键项目→属性→生成→找到Views目录下的.cshtml文件,设置复制到输出目录为「始终复制」或「如果较新则复制」
- 方式二:直接修改项目的
.csproj文件,添加配置:<ItemGroup> <Content Update="Views\**\*.cshtml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
3. 检查IIS配置
- 确认IIS应用程序池的.NET Core版本与项目目标框架匹配(如项目用.NET 6,则应用程序池需设置为.NET 6)
- 确保应用程序池身份拥有网站目录的读取权限,以及临时编译目录的写入权限(运行时编译需要生成临时文件)
4. 检查发布配置
- 发布时选择「框架依赖」模式,确保服务器已安装对应版本的.NET Core运行时
- 取消勾选「裁剪未使用的代码」选项,避免运行时编译依赖被误删
内容的提问来源于stack exchange,提问作者msalahi
相关产品推荐
相关产品推荐

