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

从Azure Pipeline部署到IIS服务器时遇ERROR_FILE_IN_USE错误求助

解决Azure Pipeline部署IIS时的ERROR_FILE_IN_USE错误

问题背景

部署时收到错误:

错误代码:ERROR_FILE_IN_USE
详细信息:Web Deploy无法修改目标服务器上的'file.dll'文件,因为它被外部进程锁定。要使发布操作成功,您可能需要重启应用以释放锁定,或为.Net应用使用AppOffline规则处理程序。

已尝试启用"Take App Offline"、停止/启动应用、复制文件、删除web.config、增加重试次数、添加csproj配置等方案,但问题仍存在。

额外解决方案尝试

1. 强制回收应用池并等待释放

在部署任务前添加PowerShell脚本,远程回收目标应用池并等待足够时间确保文件锁释放:

# 替换为实际的应用池名称和服务器地址
$appPoolName = "YourTargetAppPool"
$serverName = "IISServerHostname"

Invoke-Command -ComputerName $serverName -ScriptBlock {
    Import-Module WebAdministration
    # 回收应用池
    Restart-WebAppPool -Name $using:appPoolName
    # 等待10秒确保进程完全退出
    Start-Sleep -Seconds 10
}

确保Pipeline执行账号拥有目标服务器的远程执行权限和IIS管理权限。

2. 自定义Web Deploy发布配置

在项目的发布配置文件(如Properties/PublishProfiles/YourProfile.pubxml)中添加更严格的离线配置,同时手动创建app_offline.htm文件:

<PropertyGroup>
  <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
  <MSDeployUseChecksum>true</MSDeployUseChecksum>
  <DeployIisAppPath>YourSite/YourApplication</DeployIisAppPath>
  <EnableMSDeployBackup>false</EnableMSDeployBackup>
</PropertyGroup>

在项目根目录创建app_offline.htm(内容示例:<h1>维护中,稍后恢复</h1>),确保Web Deploy会在部署前上传该文件并触发应用离线。

3. 定位锁定文件的进程

部署失败后立即在目标服务器执行命令,找出锁定file.dll的进程:

# 使用cmd查找
tasklist /m file.dll
# 使用PowerShell查找
Get-Process | Where-Object {$_.Modules.FileName -match "file.dll"} | Select-Object Id, ProcessName, Path

如果锁定进程是w3wp.exe之外的程序(如调试工具、后台服务),需先停止该进程再部署;如果是w3wp.exe,检查应用池回收是否生效,可延长回收后的等待时间。

4. 配置MSDeploy额外参数

在Azure Pipeline的IIS Web App Deploy任务中,找到Additional Arguments字段,添加以下参数增强解锁能力:

-enableRule:AppOffline -enableRule:SkipLockedFiles -retryAttempts:5 -retryInterval:2000
  • -enableRule:SkipLockedFiles:跳过暂时无法替换的锁定文件,后续重试
  • -retryAttempts/-retryInterval:设置重试次数(5次)和间隔(2秒)

5. 临时禁用应用预加载

如果目标网站启用了预加载,可能导致应用提前启动锁定文件,可在部署前后通过脚本切换:

# 部署前禁用预加载
Set-ItemProperty "IIS:\Sites\YourSiteName" -Name preloadEnabled -Value $false
# 执行部署任务...
# 部署后重新启用预加载
Set-ItemProperty "IIS:\Sites\YourSiteName" -Name preloadEnabled -Value $true

6. 排查第三方锁定源

检查服务器上的杀毒软件、文件监控工具、备份服务等,是否实时扫描或备份应用目录。临时关闭这些工具的相关功能,测试部署是否正常,确认后添加应用目录到排除列表。

内容的提问来源于stack exchange,提问作者Tahami Rizwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:18:27