Azure DevOps部署项目至IIS时如何配置app_offline页面正常显示
IIS部署环节app_offline.htm正常生效的配置指南
核心生效规则先明确
按照IIS的原生判定逻辑:只要当前映射的站点物理根目录下存在
app_offline.htm文件,IIS就会自动中断该站点的所有应用请求,直接返回这个页面给所有访问者,直到文件被移除。所有配置的核心目标,就是保证部署流程中这个文件能在正确的时机、放到IIS可识别的根路径下。
两种可落地的配置方案
方案1:直接复用Azure DevOps部署任务的内置能力(无需手动维护源码路径)
这是和你现有发布流程适配成本最低的方式:
- 找到发布流水线里负责IIS部署的
IIS Web App Deploy任务配置页 - 展开「部署离线设置」分组,做两个配置:
- 勾选部署前让应用离线选项:任务会自动在部署启动时在站点根目录写入临时离线页
- 如果要用你自己写的自定义
app_offline.htm,直接把这个文件的完整物理路径,填到「离线页路径」输入框中
- 这套机制不需要你手动把文件放到项目源码目录里:任务会在部署全流程自动处理文件的放置和清理,部署完成后自动删除根目录下的离线文件,让站点恢复正常访问。
方案2:通过项目源码携带离线文件(适配自定义发布流程场景)
如果你不想用内置任务能力,想通过代码仓库把文件随发布包带上线,就要严格按照路径规则放置:
- 正确放置位置:把你写好的
app_offline.htm直接放到和项目文件(.csproj/.vbproj)同级的项目根目录下 - 必须配置文件的生成属性:右键点击该文件,在属性面板里把「复制到输出目录」选项设置为如果较新则复制
- 以上配置的效果是:项目编译打包时,
app_offline.htm会被直接输出到发布包的根目录,最终随发布流程落到IIS站点的物理根路径下,满足IIS的离线触发规则。
容易导致生效失败的常见问题
- 不要把文件放到解决方案根目录:解决方案根目录和项目编译的输出目录相互独立,这个位置的文件不会被打进发布包
- 文件名必须严格匹配:必须是完整的
app_offline.htm,大小写、后缀名错配都会导致IIS无法识别 - 最终检查文件层级:部署过程中要确认
app_offline.htm是和站点下的web.config处于同一级目录,放在任意子文件夹内的同名文件,都不会触发站点全局离线。
内容的提问来源于stack exchange,提问作者Muthu mani
相关产品推荐
相关产品推荐

