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

时间:2019-08-15 07:43:17

标签: .net-core msbuild azure-pipelines

我正在使用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://docs.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映像中可用。有办法实现吗?

1 个答案:

答案 0 :(得分:2)

我认为您最好在任务中指定 .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

作为测试,在我使用.Net Core SDK(版本为2.2.401)构建项目后,如下图所示:

enter image description here

它使用的MSbuild版本是16。因此,它满足了基础文件格式的定义:

enter image description here

这是基础fody文件的一部分。您会看到,它被定义为仅MSbuild版本为16,否则它将像您收到的一样抛出错误消息。

因此,要解决您的问题,建议您尝试在任务中将.Net Core SDK指定为2.2.401或更高版本。