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

Azure Pipeline构建任务失败,报错MSB3021、MSB3027求助

解决Azure Pipeline构建MSB3021、MSB3027错误

错误原因分析

从日志能直接看出问题核心:构建任务试图将NuGet包中的DLL复制到以.csproj项目文件为路径的目标位置(比如DevOpsProject/DevOpsProject.csproj\Swashbuckle.AspNetCore.Swagger.dll)。.csproj是项目文件而非目录,系统无法在文件路径下创建新文件,最终触发复制超时、路径不存在的错误。

问题根源在于DotNetCoreCLI@2任务的OutputPath参数配置错误:你将输出路径设置为$(System.DefaultWorkingDirectory)\$(solution),而$(solution)变量指向的是DevOpsProject/DevOpsProject.csproj项目文件,不是合法目录。

修正步骤

1. 修复OutputPath路径配置

修改DotNetCoreCLI@2任务的arguments参数,将OutputPath改为合法的目录路径,比如项目根目录下的bin子目录:

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '$(solution)'
    publishWebProjects: false
    arguments: '--configuration $(buildConfiguration) /p:OutputPath="$(System.DefaultWorkingDirectory)\bin\$(buildConfiguration)"'

2. 修正代理池冲突配置

你的YML同时指定了vmImage: ubuntu-latest(微软托管代理)和name: FirstAgentsPool(自托管代理),两者不能共存。既然要使用自托管Windows代理,需删除vmImage配置:

pool:
  name: FirstAgentsPool
  # 移除 vmImage: ubuntu-latest 这一行

3. 简化冗余任务(可选优化)

DotNetCoreCLI的build命令默认会自动执行restore操作,可删除单独的NuGetCommand@2任务,简化流程:

# 删除以下冗余任务
# - task: NuGetCommand@2
#   displayName: 'dotnet restore'
#   inputs:
#     command: 'restore'
#     restoreSolution: '$(sln)'

完整修正后的YAML示例

azure-pipelines.yml

trigger:
- none

variables:
- template: variables.yml

pool:
  name: FirstAgentsPool

stages:
- stage: BuildValidation
  jobs:
  - job: Build
    steps:
    - task: UseDotNet@2
      inputs:
        version: 6.x
    - task: DotNetCoreCLI@2
      displayName: Clean
      inputs:
        command: clean
        projects: '$(solution)'
        arguments: '--configuration $(buildConfiguration)'
    - task: DotNetCoreCLI@2
      displayName: Build
      inputs:
        command: build
        projects: '$(solution)'
        publishWebProjects: false
        arguments: '--configuration $(buildConfiguration) /p:OutputPath="$(System.DefaultWorkingDirectory)\bin\$(buildConfiguration)"'

variables.yml

variables:
  buildConfiguration: Release
  solution: DevOpsProject/DevOpsProject.csproj
  sln: DevOpsProject/DevOpsProject.sln

额外建议

  • 添加Clean任务可清理历史构建输出,避免文件锁定导致的复制失败;
  • 确保自托管Windows代理已安装.NET 6.x SDK,且代理账号对工作目录拥有读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:09:55