.net core Azure DevOps管道可以';我看不到.NETCore3.1SDK,但它';这是唯一安装的版本

.net core Azure DevOps管道可以';我看不到.NETCore3.1SDK,但它';这是唯一安装的版本,.net-core,azure-devops,.net Core,Azure Devops,在网上有几个地方,人们提到Azure DevOps在使用.NET Core 3.1 SDK等方面存在问题。通常建议使用use.NET Core任务将Azure DevOps从以前的任何版本切换到3.1,这通常是可行的 在我的情况下,Azure DevOps仍然无法判断是否安装了3.1。即使我登录到代理机器(我们使用自己的代理),卸载除3.1 SDK之外的所有东西,然后重新启动,Azure DevOps仍然尝试使用2.0或其他东西 在执行Visual Studio build任务之前,我有一个带有

在网上有几个地方,人们提到Azure DevOps在使用.NET Core 3.1 SDK等方面存在问题。通常建议使用
use.NET Core
任务将Azure DevOps从以前的任何版本切换到3.1,这通常是可行的

在我的情况下,Azure DevOps仍然无法判断是否安装了3.1。即使我登录到代理机器(我们使用自己的代理),卸载除3.1 SDK之外的所有东西,然后重新启动,Azure DevOps仍然尝试使用2.0或其他东西

在执行
Visual Studio build
任务之前,我有一个带有以下脚本的
命令行
任务:

dotnet --info
这将产生以下内容,减去开头和结尾的一些额外文本:

.NET Core SDK (reflecting any global.json):
 Version:   3.1.102
 Commit:    573d158fea

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.102\

Host (useful for support):
  Version: 3.1.2
  Commit:  916b5cba26

.NET Core SDKs installed:
  3.1.102 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

下一个任务是Visual Studio build,它列出了如下错误:

##[error]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(112,5): Error : The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 1.1 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
.
.
.
##[error]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(126,5): Error : The current .NET SDK does not support targeting .NET Standard 2.0.  Either target .NET Standard 1.6 or lower, or use a version of the .NET SDK that supports .NET Standard 2.0.
无论是否包含
Use.NET Core
任务,它基本上都是这样做的

在从计算机上卸载.NET Core 2.1 SDK之前,它将尝试使用.NET Core 2.1,而不是1.1。在这种情况下,错误将要求2.1

在2.1之前,如果我使用
Use.NET Core
并将其设置为
3.1.x
,它将成功运行,但构建任务将抛出与上述基本相同的错误,甚至拒绝使用2.1。

请注意,这是一个VS2017项目,操作系统版本为Microsoft Windows Server 2019数据中心

…为什么它看不到3.1 SDK?

我无法评论(业力不够),但听起来你试图使用错误的构建过程编译.NET核心项目。看起来您正试图让Visual Studio 2017构建一个核心项目,而在Azure DevOps中,.Net核心任务下有一个核心构建任务

如果它是一个真正的Core3项目,那么使用“.NETCore”任务来运行您的构建

我们在DevOps管道中使用以下内容:

  • 使用.NET Core(设置机器上的版本)(您已经完成了此操作 位)
  • .Net核心任务->还原
  • .Net核心任务->构建
  • .Net核心测试->测试
  • .Net核心任务->发布

您实际上是在告诉DevOps使用旧版本的VisualStudio构建引擎来构建您的项目,该引擎不知道您试图使用的.Net核心运行时

如果您想知道这里发生了什么,VisualStudio只针对完整的框架,或者VS版本在其构建步骤中知道的.Net核心版本(这就是为什么会出现SDK错误)。当您在visual studio中开发时,它可以针对您在本地计算机上安装的任何core vesion,因为它正在读取您的csproj文件设置以查找要针对的版本,然后visual studio将有效地“shell”输出到本地core安装以进行生成。DevOps无法做到这一点,因为随Visual Studio构建步骤一起安装的工具与您的本地计算机不同,只能针对某些SDK,我无法对此发表评论(Karma不够),但听起来您试图使用错误的构建过程编译.NET核心项目。看起来您正试图让Visual Studio 2017构建一个核心项目,而在Azure DevOps中,.Net核心任务下有一个核心构建任务

如果它是一个真正的Core3项目,那么使用“.NETCore”任务来运行您的构建

我们在DevOps管道中使用以下内容:

  • 使用.NET Core(设置机器上的版本)(您已经完成了此操作 位)
  • .Net核心任务->还原
  • .Net核心任务->构建
  • .Net核心测试->测试
  • .Net核心任务->发布

您实际上是在告诉DevOps使用旧版本的VisualStudio构建引擎来构建您的项目,该引擎不知道您试图使用的.Net核心运行时


如果您想知道这里发生了什么,VisualStudio只针对完整的框架,或者VS版本在其构建步骤中知道的.Net核心版本(这就是为什么会出现SDK错误)。当您在visual studio中开发时,它可以针对您在本地计算机上安装的任何core vesion,因为它正在读取您的csproj文件设置以查找要针对的版本,然后visual studio将有效地“shell”输出到本地core安装以进行生成。DevOps无法做到这一点,因为随Visual Studio构建步骤安装的工具与您的本地计算机不同,只能针对特定的SDK,或者在代理上安装VS2019,并确保代理版本支持VS2019附带的MsBuild版本。谢谢,伙计,这很好,特别是您添加的用于描述问题根源的解释。请确保在代理上安装VS2019,并确保代理版本支持VS2019附带的MsBuild版本。谢谢,伙计,这很尖锐,尤其是添加的用于描述问题根源的解释。