C# ASP.NET MVC IIS部署后IWebHostEnvironment.WebRootPath路径错误
异常产生原因
- 发布时夹带了开发环境配置文件:项目
Properties目录下的launchSettings.json或者环境专属配置文件appsettings.Development.json被一同发布到了部署目录。ASP.NET Core默认会匹配当前运行环境加载对应配置,如果站点被识别为Development环境,会直接读取launchSettings.json中预设的webRoot路径,也就是你开发阶段的本地路径。 - IIS站点配置了错误的环境变量:你在IIS对应站点的「配置编辑器」→
system.webServer/aspNetCore节点下,手动设置了ASPNETCORE_ENVIRONMENT值为Development,甚至额外配置了WEBROOT_PATH环境变量指向开发路径,程序启动时会优先读取该硬编码值。 - 启动代码中硬编码了WebRoot路径:
Program.cs或Startup.cs中手动调用了UseWebRoot("c:\\dev\\projects\\site_A\\wwwroot")方法写死路径,或是自定义了IWebHostEnvironment初始化逻辑,覆盖了默认的站点根目录读取规则,无论部署到什么位置都会使用硬编码的路径。 - 发布目录存在旧文件残留:发布操作未清空目标目录,之前的开发环境配置、编译缓存文件残留,导致程序加载了旧的路径配置。
排查修复方案
- 检查部署目录
d:\www\qa,删除其中的launchSettings.json、appsettings.Development.json文件,后续发布时调整发布规则,排除开发环境专属配置文件。 - 打开IIS对应站点的配置编辑器,检查
aspNetCore节点下的环境变量,将ASPNETCORE_ENVIRONMENT调整为Staging或Production,删除手动配置的WEBROOT_PATH变量。 - 检查项目启动代码,删除硬编码的
UseWebRoot调用,确认没有自定义覆盖IWebHostEnvironment的WebRoot路径逻辑。 - 重新发布时勾选「删除目标目录中的所有现有文件」选项,避免旧文件残留影响。
内容的提问来源于stack exchange,提问作者Developer Webs
相关产品推荐
相关产品推荐

