Visual Studio 2022发布失败:无法删除目标文件
解决方案
直接在项目的.csproj文件里添加以下MSBuild目标配置,就能确保首次发布成功:
<!-- 在.csproj文件中添加 --> <Target Name="PublishAppOffline" BeforeTargets="CleanPublishFolder"> <!-- 复制app_offline.htm到发布目录,触发IIS关闭应用池 --> <Copy SourceFiles="app_offline.htm" DestinationFolder="$(PublishDir)" /> <!-- 等待3秒,给IIS足够时间完成应用池回收(可根据服务器性能调整次数) --> <Exec Command="ping -n 4 127.0.0.1 > nul" /> </Target> <Target Name="RemoveAppOffline" AfterTargets="Publish"> <!-- 发布完成后自动删除维护页面,恢复正常访问 --> <Delete Files="$(PublishDir)app_offline.htm" /> </Target>
配套操作
- 在项目根目录创建
app_offline.htm文件,内容可以是简单的维护提示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>应用更新中</title> </head> <body> <div style="text-align:center; margin-top:100px;"> <h1>应用正在更新,请稍后再访问</h1> </div> </body> </html>
原理说明
BeforeTargets="CleanPublishFolder":强制让复制app_offline.htm的操作优先于VS的删除现有文件步骤执行,解决之前顺序不对的问题。- ping命令是系统自带的延迟方式,不需要额外工具,
ping -n 4等价于等待3秒(每次ping间隔1秒,4次请求有3个间隔),如果服务器性能差,可把数字调大(比如-n 5就是等4秒)。 - 发布完成后自动删除app_offline.htm,用户不会一直看到维护页面。
内容的提问来源于stack exchange,提问作者WillC
相关产品推荐
相关产品推荐

