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
相关产品推荐
相关产品推荐

