在Azure Pipeline中的DotNetCoreCLI任务中指定MSBuild版本

4

我正在使用DotNetCoreCLI任务来构建一个项目。但我想用MSBuild 16.0来构建它,目前似乎不可能。以下是事实(摘自Azure Pipelines Yaml):

pool:
  vmImage: 'windows-2019'
steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet build'
  inputs:
    projects: '$(BuildProjectFilter)'
    arguments: '--configuration $(BuildConfiguration) -:Platform=$(BuildPlatform) -p:VisualStudioVersion=16.0 -p:tv=16.0'

无论我尝试什么,dotnet build命令始终使用ToolsVersion 15.0版本:
==============================================================================
Task         : .NET Core
Description  : Build, test, package, or publish a dotnet application, or run a custom dotnet command
Version      : 2.156.1
Author       : Microsoft Corporation
Help         : https://learn.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
==============================================================================
[command]C:\windows\system32\chcp.com 65001
Active code page: 65001
[command]"C:\Program Files\dotnet\dotnet.exe" build d:\a\1\s\src\xxx.csproj --configuration release -p:Platform=x64 -p:VisualStudioVersion=16.0 -p:tv=16.0
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

如果我只提供-tv:16.0开关,MSBuild就会抱怨:

MSBUILD : error MSB1040: ToolsVersion is not valid. The tools version "16.0" is unrecognized. Available tools versions are "15.0".

如果我提供 -p:VisualStudioVersion=16.0 -p:tv=16.0 ,结合Fody,稍后会识别出错误。
 Fody is only supported on MSBuild 16 and above. Current version: 15.

当然,降级Fody可能是一个解决方案。但我更想使用MSBuild 16,因为它应该在此vm镜像中可用。是否有一种方法实现这一点?


您可以尝试使用最新的SDK版本(2.2.401)来构建您的存储库。如果在此尝试后错误仍然发生,最好分享更多关于仅使用-tv:16.0但出现MSB1040错误代码的错误日志。通常,在此行之前,将有一些关于错误原因的关键信息。您介意在问题中分享吗? - Mengdi Liang
1个回答

4
我认为在您的任务中最好指定更高版本的.NET Core SDK 2.2.401
如果我使用SDK 2.2.101构建项目,我将收到与您相同的错误消息:

enter image description here

为了解释这个问题,您可以查看doc中提到的下面内容:

enter image description here

如果你使用的 .Net Core SDK 版本低于 2.2.401,由于这些较低版本的 SDK 无法与 VS2019 兼容。此时,即使你指定了 VS 2019,它仍将使用归属于 VS2017 的构建引擎。这就是为什么在你的第一个错误日志中,此流水线使用的构建引擎是 15.9.20+g88f5fadfbe
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core

作为测试,当我使用版本为2.2.401的.Net Core SDK构建项目时,如下图所示:

enter image description here

它所使用的 MSbuild 版本为 16。因此,它符合底层 fody 文件的定义:

enter image description here

这是底层fody文件的一部分。你可以看到,它定义为仅当你的MSbuild版本为16时,否则会抛出像你收到的错误信息。
因此,为了解决你的问题,我建议你尝试在任务中指定.NET Core SDK为2.2.401或更高版本。

哇,太棒了!非常感谢 :) - stev-e
有没有办法指定要使用哪个版本 @merlin-liang-msft ... 我遇到了以下问题:https://dev59.com/Kbfna4cB1Zd3GeqPsWyq - pmeyer
我曾经遇到过类似的问题,Azure DevOps构建突然失败了。我的解决方案是一个.NET Core 2.1应用程序。通过分析日志,我发现构建引擎版本被降级了。之前成功的构建是.NET Core的Build Engine版本16.6.0,而失败的构建是15.7。为了解决这个问题,我在管道任务中更新了.NET Core SDK的版本,从2.1.301升级到最新版本2.1.809。 - Alin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接