You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:06:01