已部署ASP.NET Core MVC应用运行时报错 VS2019调试正常如何解决
问题原因
- 视图文件属性配置错误:本地调试时Visual Studio会直接读取项目目录内的源文件,无需依赖发布包内的文件。如果
EditRelayCalendar.cshtml的「生成操作」未设为「内容」、「复制到输出目录」未设为「如果较新则复制/始终复制」,打包发布时该文件不会被包含进部署包,Azure环境自然无法找到。 - 路径大小写不匹配:如果部署的是Azure Linux实例/ Linux容器,文件系统对大小写敏感,若文件名、文件夹名的大小写(如
EditRelayCalendar大小写、ShippingSchedules文件夹大小写)和代码调用的路径不完全一致,就会触发找不到视图的错误,而本地Windows环境调试时不区分大小写,不会暴露该问题。 - 发布规则排除了目标文件:项目的
.csproj文件中如果存在<Content Remove>规则排除了该视图文件,或者发布配置文件(.pubxml)中设置了排除Views目录下特定文件的规则,会导致打包时该文件被过滤。 - 视图预编译异常:如果项目启用了Razor视图预编译,该视图的预编译环节可能出错,或者发布配置中勾选了排除预编译视图的选项,导致运行时无法加载对应视图。
- 部署过程异常:本次发布过程中途中断、文件传输不全,导致虽然本地存在该文件,但Azure站点的实际运行目录下没有对应文件。
排查解决步骤
- 校验视图文件属性:在Visual Studio中右键点击
EditRelayCalendar.cshtml,选择「属性」,确认「生成操作」为「内容」,「复制到输出目录」设置为「如果较新则复制」。 - 核对路径大小写:检查视图文件名、
ShippingSchedules文件夹名的大小写是否和错误日志中搜索的路径完全一致,若部署到Linux环境必须保证大小写完全匹配。 - 检查项目发布配置:打开项目
.csproj文件,删除所有排除该视图文件的<Content Remove>相关配置;同时检查用于Azure发布的.pubxml配置文件,移除排除目标视图的规则。 - 验证视图预编译配置:临时关闭视图预编译测试,在
.csproj的PropertyGroup节点中加入<RazorCompileOnPublish>false</RazorCompileOnPublish>,重新发布后验证问题是否解决。 - 检查Azure站点实际文件:进入Azure门户对应应用服务的「高级工具(Kudu)」,打开文件管理进入
site/wwwroot/Views/ShippingSchedules/路径,确认EditRelayCalendar.cshtml是否真实存在,若不存在则重新打包发布即可。 - 版本回滚验证:如果此前版本运行正常,可先将Azure应用回滚到上一个可用版本,对比两次发布包的文件差异,定位问题来源。
内容的提问来源于stack exchange,提问作者Gregory Hill
相关产品推荐
相关产品推荐

