Windows Server 2022下ASP.NET Core .NET5用WebDeploy开EnableMsDeployAppOffline仍锁文件
IIS 10 下.NET5 WebDeploy稳定部署配置方案
必做基础配置调整
- 首先确认IIS侧已安装ASP.NET Core 托管捆绑包对应.NET5的版本,注意要在IIS安装完成后再安装托管捆绑包,否则会丢失对应模块注册,这是很多迁移后锁文件问题的隐形诱因。
- 调整对应应用池的高级设置:
- 关闭
启用应用程序预热:预热进程会在你停止站点后仍在后台启动持有dll锁 - 将
闲置超时(分钟)调整为1,定期回收时间间隔(分钟)调整为0(禁用默认定期回收) - 开启
禁用重叠回收:重叠回收会在旧进程完全退出前启动新进程,极易触发文件锁冲突 - 将
加载用户配置文件设置为True
- 关闭
- 调整WebDeploy发布配置,在你现有的PropertyGroup节点中新增两个配置项:
<MSDeployAppOfflineTemplate>App_offline.htm</MSDeployAppOfflineTemplate> <WaitForAppOffline>True</WaitForAppOffline>
这两个配置会强制WebDeploy在放置App_offline.htm后等待足够时长让ASP.NET Core模块完全关停进程,而不是立刻尝试覆盖文件。
手动停止应用池后的补做操作
你提到手动停应用池仍报错,是因为IIS的w3wp进程退出有最长30秒的超时等待:
- 停止应用池后,登录服务器打开任务管理器,在详细信息页手动结束对应站点的
w3wp.exe和dotnet.exe进程,确认进程完全退出后再发起部署 - 也可以在服务器上部署简单的预部署脚本,发布前自动执行停止应用池+终止对应进程的操作,完成发布后再重启应用池,稳定性更高
可选兜底方案
如果以上配置仍有偶发锁问题,可以在发布配置中新增如下节点,将部署文件先同步到临时目录,再自动替换到站点目录,完全兼容.NET5运行环境:
<UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication> <PipelineDependsOnBuild>False</PipelineDependsOnBuild>
内容的提问来源于stack exchange,提问作者Deej
相关产品推荐
相关产品推荐

