我正在使用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映像中可用。有办法实现吗?
答案 0 :(得分:2)
我认为您最好在任务中指定 .NET core SDk 2.2.401 的更高版本。
如果我使用SDK 2.2.101来构建项目,则会收到与您相同的错误消息:
要对此进行解释,您可以查看doc中提到的以下内容:
如果您使用的.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)构建项目后,如下图所示:
它使用的MSbuild版本是16。因此,它满足了基础文件格式的定义:
这是基础fody文件的一部分。您会看到,它被定义为仅MSbuild版本为16,否则它将像您收到的一样抛出错误消息。
因此,要解决您的问题,建议您尝试在任务中将.Net Core SDK指定为2.2.401或更高版本。