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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:38:24