使用多个框架时 .Net 5 的 Azure Devops 构建失败

Azure Devops Build failing for .Net 5 when using multiple frameworks

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

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

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

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

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

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

然后我得到:

##[error]C:\Program Files\dotnet\sdk.1.403\Microsoft.Common.CurrentVersion.targets(1177,5): Error MSB3644: The reference assemblies for .NETFramework,Version=v5.0 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks

如果我尝试

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

我得到:

##[error]C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1177,5): Error MSB3644: The reference assemblies for .NETFramework,Version=v5.0 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks

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

我认为构建代理机器有问题。

如果您使用 cloud azure devops,您需要等待他们更新构建机器。

如果你在前提下使用 azure devops 尝试自己更新构建机器。

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

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

- task: UseDotNet@2
inputs:
packageType: 'sdk'
Version: '{version}'
includePreviewVersions: {true/false}

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

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

也就是说,这个任务有两个作用:

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