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

Azure Pipeline中csproj构建阶段间歇性失败(DotNetCoreCLI@2)

Azure Pipeline中DotNetCoreCLI@2构建Azure Functions项目间歇性失败(文件被占用)

问题现象

用DotNetCoreCLI@2任务构建基于Microsoft.NET.Sdk.Functions 4.2.0的csproj项目时,经常出现间歇性构建失败:

  • 偶尔重试构建步骤就能成功,但有时会反复报错
  • 核心错误是文件被其他进程占用,具体日志如下:

[warning]C:\Users\VssAdministrator.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(70,5): Warning MSB3026: Could not copy "D:\a\1\s\publish_output\RectangularChamber\Microsoft.AspNetCore.Http.dll" to "D:\a\1\s\publish_output\RectangularChamber\bin\Microsoft.AspNetCore.Http.dll". Beginning retry 1 in 1000ms. The process cannot access the file 'D:\a\1\s\publish_output\RectangularChamber\bin\Microsoft.AspNetCore.Http.dll' because it is being used by another process.
C:\Users\VssAdministrator.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(70,5): warning MSB3026: Could not copy "D:\a\1\s\publish_output\RectangularChamber\Microsoft.AspNetCore.Http.dll" to "D:\a\1\s\publish_output\RectangularChamber\bin\Microsoft.AspNetCore.Http.dll". Beginning retry 1 in 1000ms. The process cannot access the file 'D:\a\1\s\publish_output\RectangularChamber\bin\Microsoft.AspNetCore.Http.dll' because it is being used by another process. [D:\a\1\s_Assets\AccessCover\src\AccessCover.csproj]
##[error]C:\Users\VssAdministrator.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): Error : System.IO.IOException: The process cannot access the file 'D:\a\1\s\publish_output\RectangularChamber\Register\function.json' because it is being used by another process.

这个问题没有稳定的复现步骤,同类问题已有记录但未得到彻底解决。

解决方案尝试

1. 升级Microsoft.NET.Sdk.Functions包

4.2.0版本存在已知的文件锁竞争问题,升级到4.3.0及以上版本,后续版本优化了构建时的文件访问逻辑,能有效缓解这类问题。

2. 强制清理+禁用增量构建

在构建任务前加一个命令行任务执行清理:

dotnet clean --verbosity normal

同时在DotNetCoreCLI@2任务的参数里加上--no-incremental,禁用增量构建,避免缓存文件引发锁冲突:

- task: DotNetCoreCLI@2
  displayName: 'Build project'
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration Release --no-incremental'

3. 修改发布输出目录

别用默认的相对输出目录,指定一个独立的、每次构建都会清空的目录,减少文件复用带来的锁竞争。可以在csproj里加配置:

<PropertyGroup>
  <PublishDir>$(Build.ArtifactStagingDirectory)/publish/$(AssemblyName)</PublishDir>
</PropertyGroup>

或者在构建任务的参数里指定--output:

arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)/publish'

4. 给构建任务加自动重试

在Azure Pipeline里给构建任务配置自动重试,用重试策略覆盖间歇性失败:

- task: DotNetCoreCLI@2
  displayName: 'Build project'
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration Release'
  retryCountOnTaskFailure: 3

5. 排除构建目录的系统扫描(自托管代理)

如果用的是自托管代理,检查代理机器上的Windows搜索索引、杀毒软件是否在扫描构建输出目录,这些进程可能会锁定文件。临时禁用扫描或者把构建目录加入排除列表,验证是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:13:14