ASP.NET MVC项目发布至IIS后出现开发模式错误
核心原因
你改launchsettings.json只对本地用VS启动调试的场景生效,部署到IIS之后这个文件的配置不会被加载,当前IIS上的站点实际仍运行在Development环境,加上可能存在基础配置缺失、托管模块未安装的问题,才会触发该报错。
解决步骤
- 给IIS站点配置生产环境变量
打开IIS管理器找到你部署的目标站点,双击「配置编辑器」,节选择system.webServer/aspNetCore,点开environmentVariables项新增配置:- 变量名:
ASPNETCORE_ENVIRONMENT - 变量值:
Production
填完点击右上角应用,重启站点即可。
- 变量名:
- 重新正确发布项目
右键项目选择发布,发布设置里一定要勾选「发布期间删除所有现有文件」,避免本地调试生成的旧配置残留到发布目录,发布配置选Release模式,不要用Debug模式发布。 - 检查项目中间件配置
打开项目里的Program.cs(.NET 6及以上版本)或者Startup.cs(.NET 5及以下版本),确认环境判断和中间件顺序没有写错:// 生产环境关闭开发者异常页 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } // 以下中间件不要遗漏,顺序不能随意调整 app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); - 安装对应版本的托管组件
检查部署服务器有没有安装和你项目.NET大版本对应的ASP.NET Core Hosting Bundle,未安装的话装完执行iisreset命令重启整个IIS服务。 - 配置目录权限
找到站点对应的物理部署文件夹,给IIS_IUSRS用户开启读取、执行权限,避免程序因为权限不足读不到DLL、配置文件导致启动失败。
排查小技巧:配置完成后可以先在部署目录放一个普通静态html文件,能正常访问该文件后再测试MVC路由,先排除静态模块的问题,排查效率更高。
内容的提问来源于stack exchange,提问作者Melina
相关产品推荐
相关产品推荐

