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

Azure Pipeline构建失败:.NET SDK 8.0.101要求MSBuild 17.7.0及以上

问题:Azure Pipeline构建.NET 8 Blazor Web App失败(Ubuntu-22.04镜像)

使用Azure Pipeline构建**新模式Blazor Web App(.NET 8.0.200)**时失败,虚拟机镜像选用Ubuntu-22.04,NuGet Restore任务报错:

##[error]NuGet命令执行失败,退出代码(1),错误详情:/home/vsts/work/1/s/WebApp/Alurnet.Oniria.Encyclopedia.v7.WebApp.Client/Alurnet.Oniria.Encyclopedia.v7.WebApp.Client.csproj : 错误:.NET SDK 8.0.101版本要求至少MSBuild 17.7.0版本,但当前环境可用的MSBuild版本为16.10.1.31701。请修改global.json中指定的.NET SDK版本,使用一个适配当前MSBuild版本的旧版本。

问题核心:.NET SDK 8.0.101要求MSBuild 17.7.0及以上,但Ubuntu-22.04镜像默认MSBuild版本为16.10.1,且无法在该镜像上安装本地开发机使用的MSBuild 17.9.5版本。


解决方案

无需手动安装MSBuild,通过指定.NET SDK版本并使用dotnet命令替代独立NuGet任务即可解决版本不匹配问题,修改后的Pipeline配置如下:

trigger:
- integration

pool:
  vmImage: 'Ubuntu-22.04'

variables:
  buildConfiguration: 'Release'

stages:
- stage: ContinousIntegration
  jobs:
  - job: BuildTestAndPublish
    displayName: '构建、测试并发布应用'
    steps:
    - checkout: self
    
    # 安装指定版本的.NET SDK
    - task: UseDotNet@2
      displayName: '安装.NET 8.0.200 SDK'
      inputs:
        packageType: 'sdk'
        version: '8.0.200'
        includePreviewVersions: false

    # 使用dotnet restore替代NuGetCommand,自动适配SDK自带的MSBuild
    - task: DotNetCoreCLI@2
      displayName: 'dotnet restore'
      inputs:
        command: 'restore'
        projects: '**/*.sln'
        arguments: '--configuration $(buildConfiguration)'

    - task: DotNetCoreCLI@2
      displayName: 'dotnet build'
      inputs:
        command: 'build'
        projects: '**/*.csproj'
        arguments: '--configuration $(buildConfiguration) --no-restore'
        workingDirectory: '$(System.DefaultWorkingDirectory)'

    - task: DotNetCoreCLI@2
      displayName: '单元测试'
      inputs:
        command: 'test'
        projects: '**/*.UnitTest.csproj'
        arguments: '--configuration $(buildConfiguration) --no-restore'
        testRunTitle: '单元测试'
        workingDirectory: '$(System.DefaultWorkingDirectory)'

    - task: DotNetCoreCLI@2
      displayName: 'dotnet publish'
      inputs:
        command: 'publish'
        publishWebProjects: true
        arguments: '--configuration $(buildConfiguration) --output $(build.ArtifactStagingDirectory) --no-restore'
        zipAfterPublish: true
        workingDirectory: '$(System.DefaultWorkingDirectory)'

    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'

关键修改说明

  • 移除手动安装MSBuild的脚本:Ubuntu环境下,.NET SDK自带适配版本的MSBuild,无需单独安装
  • 添加UseDotNet@2任务:明确指定安装项目使用的.NET 8.0.200 SDK,确保环境使用正确的SDK版本
  • 替换NuGet Restore任务:使用DotNetCoreCLI@2的restore命令替代NuGetCommand@2,dotnet restore会自动绑定当前SDK对应的MSBuild,彻底避免版本不匹配问题
  • 添加--no-restore参数:在build、test、publish步骤中添加该参数,避免重复执行restore操作,提升构建效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:58:13