Blazor WASM在DevOps YAML流水线构建失败求助
问题详情
基于Blazor WASM样板项目搭建Azure DevOps YAML流水线构建环境,构建任务配置如下:
- task: Bash@3 displayName: Build CMS inputs: targetType: 'inline' script: 'dotnet publish $(solution) -f net7.0 -c WebRelease'
本地构建完全正常,但DevOps服务器端构建时持续出现文件占用错误:
C:\Program Files\dotnet\sdk\7.0.306\Sdks\Microsoft.NET.Sdk.BlazorWebAssembly\targets\Microsoft.NET.Sdk.BlazorWebAssembly.6_0.targets(238,5): error : The process cannot access the file 'D:\a\1\s...\Client\obj\Release\net7.0\build-gz\ZmnGp8l6.gz' because it is being used by another process. [D:\a\1\s...\Client....csproj]
移除Commons项目后,错误转移到...client.dll文件,未预期会出现此类多进程访问冲突。
可行解决方案
禁用并行构建:Blazor WASM默认并行构建可能触发文件访问竞争,修改发布命令添加串行构建参数:
dotnet publish $(solution) -f net7.0 -c WebRelease --no-parallel前置清理构建目录:在发布任务前添加清理步骤,彻底清除旧构建文件,避免残留进程占用:
- task: Bash@3 displayName: Clean Build Directory inputs: targetType: 'inline' script: 'dotnet clean $(solution) -c WebRelease --verbosity minimal' - task: Bash@3 displayName: Build CMS inputs: targetType: 'inline' script: 'dotnet publish $(solution) -f net7.0 -c WebRelease'排查重复构建任务:检查流水线配置,确认没有重复触发同一项目的构建任务,并行执行的任务会同时访问同一目录引发冲突。
升级.NET SDK版本:当前使用的7.0.306版本存在Blazor WASM并行构建的已知文件锁Bug,升级至.NET 7最新补丁版本(如7.0.401)或直接迁移到.NET 8,新版本已修复相关问题。
指定独立输出目录:将发布输出指向单独目录,避免与中间obj目录的文件访问重叠:
dotnet publish $(solution) -f net7.0 -c WebRelease -o $(Build.ArtifactStagingDirectory)/publish
内容的提问来源于stack exchange,提问作者Martin

