Visual Studio 2019中ASP.NET MVC Web Deploy自动启停站点配置失效问题
问题根源
你的配置存在两个核心问题:
- 触发时机错误:你绑定的
BeforePublish/AfterPublish是本地构建、打包阶段的目标,仅操作本地临时目录的文件,不会作用于远程IIS服务器。 - 操作方式错误:
Copy/Delete是本地文件系统操作指令,无法直接修改远程服务器的文件,你看到的_app_offline.htm被上传到远程,只是因为本地临时目录的这个文件被后续默认同步流程一并同步到了远程,但是删除本地文件不会触发远程删除操作,所以恢复上线的逻辑没有生效。
解决方案
方案1:使用Web Deploy内置功能(无需自定义下线页面)
如果不需要自定义站点下线提示内容,直接在你的pubxml文件的<PropertyGroup>节点下添加一行配置即可自动实现部署期间自动下线、部署完成自动恢复的逻辑:
<EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
该参数会让Web Deploy在部署前自动生成默认的下线页面上传到服务器,部署完成后自动删除。
方案2:自定义下线页面
如果你需要使用自己编写的_app_offline.htm自定义内容,将pubxml中的原有Target配置替换为如下内容即可:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="TakeOffline" BeforeTargets="MSDeployPublish"> <Message Text="Taking application offline" Importance="high" /> <ItemGroup> <OfflineFile Include="_app_offline.htm" /> </ItemGroup> <MSDeploy SourcePath="%(OfflineFile.FullPath)" DestinationPath="$(DeployIisAppPath)/app_offline.htm" ComputerName="$(MSDeployServiceURL)" UserName="$(UserName)" Password="$(Password)" AuthType="$(AuthType)" Operation="Sync" /> </Target> <Target Name="RestoreOnline" AfterTargets="MSDeployPublish"> <Message Text="Restoring application online" Importance="high" /> <MSDeploy DestinationPath="$(DeployIisAppPath)/app_offline.htm" ComputerName="$(MSDeployServiceURL)" UserName="$(UserName)" Password="$(Password)" AuthType="$(AuthType)" Operation="Delete" /> </Target> </Project>
注意事项
- 确保项目根目录下存在
_app_offline.htm文件,且文件属性的「复制到输出目录」设置为「如果较新则复制」 - 上述配置会自动复用你在发布配置中填写的服务器地址、用户名、密码等参数,无需额外修改。
内容的提问来源于stack exchange,提问作者User987
相关产品推荐
相关产品推荐

