使用多个框架时,.Net 5 的 Azure Devops Build 失败

DrG*_*iff 4 azure-devops azure-pipelines .net-5 dotnetcorecli

我有一个使用以下框架构建的项目:

<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>

Run Code Online (Sandbox Code Playgroud)

这在我的本地计算机上编译得很好,但是当我将其推送到 Azure 时,它​​失败了。

当我的 YAML 文件中有以下内容时:

variables:
  solution: '**/*.sln'
  buildConfiguration: 'Release'
  buildPlatform: 'Any CPU'
  platform: x64

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'
Run Code Online (Sandbox Code Playgroud)

然后我得到:

##[错误]C:\Program Files\dotnet\sdk\3.1.403\Microsoft.Common.CurrentVersion.targets(1177,5): 错误 MSB3644: 找不到 .NETFramework,Version=v5.0 的参考程序集。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在 https://aka.ms/msbuild/developerpacks下载 .NET Framework 开发人员包

如果我尝试

- task: VSBuild@1
  displayName: 'Build all'
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    maximumCpuCount: true
Run Code Online (Sandbox Code Playgroud)

我得到:

##[错误]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1177,5):错误 MSB3644:.NETFramework 的参考程序集,Version=v5.0 未找到。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在 https://aka.ms/msbuild/developerpacks下载 .NET Framework 开发人员包

  1. 开发人员包文档仅引用较旧的 .Net Framework,因此我怀疑这是不相关/过时的。
  2. 如果我将 .Net 5 更改为 .Net Core 3.1,则效果很好,即<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.1</TargetFrameworks>

Jan*_*SFT 6

您的项目未成功生成的原因是 Microsoft 托管代理未安装 .NET 5.0 SDK。

您可以使用Use.NET Core Task下载.NET 5.0 SDK :

- task: UseDotNet@2
inputs:
packageType: 'sdk'
Version: '{version}'
includePreviewVersions: {true/false}
Run Code Online (Sandbox Code Playgroud)

该任务可以从网络下载特定版本的.Net SDK并将其添加到PATH中。

此外,由于您在项目中使用多个版本的 .NET,因此您可以使用此任务来指定在以下任务中将使用哪个版本的 .NET。

换句话说,这个任务有两个作用:

  1. 下载未安装的特定 SDK 版本。
  2. 指定以下任务将使用哪个 SDK 版本。