Azure Release Pipeline IIS部署报ERROR_FILE_IN_USE文件锁定错误如何解决
解决Azure Release Pipeline IIS部署时DLL锁定问题的自动化方案
方案1:标准停止-部署-启动流程(优先选用)
单纯回收应用池无法保证进程完全退出释放锁,改用显式停止→等待→部署→启动的流程即可解决90%以上的锁定问题,YAML配置参考如下:
steps: # 第一步:停止目标应用程序池 - task: IISWebAppManagementOnMachineGroup@0 inputs: IISDeploymentType: 'IISApplicationPool' ActionIISApplicationPool: 'StopAppPool' AppPoolName: '替换为你的应用池名称' # 第二步:固定等待3-5秒保证进程完全退出释放文件锁 - task: PowerShell@2 inputs: targetType: 'inline' script: 'Start-Sleep -Seconds 5' # 第三步:执行IIS Web部署任务,保持开启Take App Offline Flag配置 - task: IISWebAppDeploymentOnMachineGroup@0 inputs: WebSiteName: '替换为你的站点名称' Package: '$(System.DefaultWorkingDirectory)/**/*.zip' TakeAppOfflineFlag: true # 第四步:重新启动应用程序池 - task: IISWebAppManagementOnMachineGroup@0 inputs: IISDeploymentType: 'IISApplicationPool' ActionIISApplicationPool: 'StartAppPool' AppPoolName: '替换为你的应用池名称'
方案2:主动投放app_offline.htm(内置Take App Offline失效时使用)
部分场景下Web Deploy自带的Take App Offline规则因为IIS权限、托管模式问题未生效,可在部署前主动向站点根目录投放app_offline.htm强制站点下线,部署完成后删除即可:
steps: # 投放app_offline.htm强制站点下线 - task: PowerShell@2 inputs: targetType: 'inline' script: | $sitePath = "替换为你的站点物理路径,例:C:\inetpub\wwwroot\你的站点名" New-Item -Path $sitePath -Name "app_offline.htm" -ItemType File -Value "站点正在更新中" -Force Start-Sleep -Seconds 3 # 执行部署任务 - task: IISWebAppDeploymentOnMachineGroup@0 inputs: WebSiteName: '替换为你的站点名称' Package: '$(System.DefaultWorkingDirectory)/**/*.zip' # 部署完成后删除app_offline.htm恢复站点访问 - task: PowerShell@2 inputs: targetType: 'inline' script: | $sitePath = "替换为你的站点物理路径,例:C:\inetpub\wwwroot\你的站点名" Remove-Item -Path "$sitePath\app_offline.htm" -Force -ErrorAction SilentlyContinue
方案3:强制结束占用进程(兜底方案)
如果上述方案都不生效,可在部署前执行脚本查杀占用Microsoft.Data.SqlClient.SNI.x86.dll的进程,注意仅用于专属应用池的站点,避免误杀其他业务进程:
$dllPath = "替换为你的站点物理路径\bin\Microsoft.Data.SqlClient.SNI.x86.dll" $lockedProcess = Get-Process | Where-Object { $_.Modules.FileName -contains $dllPath } -ErrorAction SilentlyContinue if ($lockedProcess) { $lockedProcess | Stop-Process -Force -ErrorAction SilentlyContinue Start-Sleep -Seconds 2 }
内容的提问来源于stack exchange,提问作者Bart VdA
相关产品推荐
相关产品推荐

