Azure DevOps 管道错误 "Package (...) is not compatible with net60"

Azure DevOps Pipeline error "Package (...) is not compatible with net60"

我在 Azure Devops 中有源代码控制和管道。

我的项目有两个目标框架:3.1 和 6。

虽然 运行 管道,但在恢复包时会抛出错误:

##[error]The nuget command failed with exit code(1) and error(Errors in D:\a\s\nuget-tst\src\nuget-tst.csproj Package Microsoft.Extensions.Configuration.Json 3.1.3 is not compatible with net60 (.NETFramework,Version=v6.0). Package Microsoft.Extensions.Configuration.Json 3.1.3 supports: - netcoreapp3.1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (.NETStandard,Version=v2.0) Package Microsoft.Extensions.Configuration.FileExtensions 3.1.3 is not compatible with net60 (.NETFramework,Version=v6.0). Package Microsoft.Extensions.Configuration.FileExtensions 3.1.3 supports: - netcoreapp3.1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (.NETStandard,Version=v2.0) Package Microsoft.Extensions.Configuration.EnvironmentVariables 3.1.3 is not compatible with net60 (.NETFramework,Version=v6.0). Package Microsoft.Extensions.Configuration.EnvironmentVariables 3.1.3 supports: - netcoreapp3.1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (.NETStandard,Version=v2.0) One or more packages are incompatible with .NETFramework,Version=v6.0. Package Microsoft.IdentityModel.Tokens 6.5.0 is not compatible with netcoreapp3.1 (.NETCoreApp,Version=v3.1). Package Microsoft.IdentityModel.Tokens 6.5.0 supports: - net45 (.NETFramework,Version=v4.5) - net461 (.NETFramework,Version=v4.6.1) - netstandard2.0 (.NETStandard,Version=v2.0) Package Microsoft.Extensions.FileSystemGlobbing 3.1.3 is not compatible with netcoreapp3.1 (.NETCoreApp,Version=v3.1). Package Microsoft.Extensions.FileSystemGlobbing 3.1.3 supports: netstandard2.0 (.NETStandard,Version=v2.0) One or more packages are incompatible with .NETCoreApp,Version=v3.1.) ##[error]Packages failed to restore

Azure 管道 yaml:

    trigger:
  branches:
      include:
      - master

pr:
- master
- develop

pool:
  vmImage: 'windows-latest'

variables:
  solution: '*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  major: 1
  minor: 0

name: $(major).$(minor)$(Rev:.r)

stages:

# Versioning master branch builds

- stage:
  displayName: Build_Master_Version_Number
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  jobs:
  - job: Build_Master_Version_Number
    variables:
       patch: $[counter(variables['minor'], 0)]
    steps:
      - bash: |
           echo "##vso[build.updatebuildnumber]$(major).$(minor).$(patch)"
        name: SetMasterBuildName

# Versioning feature branch and PR builds

- stage:
  displayName: Build_Branch_Version_Number
  condition: ne(variables['Build.SourceBranch'], 'refs/heads/master')
  jobs:
  - job: Build_Branch_Version_Number
    variables:
       prpatch: $[counter(variables['system.pullrequest.pullrequestid'], 0)]
       brpatch: $[counter(variables['build.sourcebranchname'], 0)]
    steps:
      - bash: |
           echo "##vso[build.updatebuildnumber]$(major).$(minor)-PullRequest.$(prpatch)"
        condition: eq(variables['Build.Reason'], 'PullRequest')
        name: SetPRBuildName
      - bash: |
           echo "##vso[build.updatebuildnumber]$(major).$(minor)-$(Build.SourceBranchName).$(brpatch)"
        condition: ne(variables['Build.Reason'], 'PullRequest')
        name: SetBranchBuildName

# Stage for building your application

- stage: Build_Steps
  displayName: Build_Steps
  condition: always()
  jobs:  
  - job: Build_Steps
    displayName: Build_Steps

    steps:

    - task: UseDotNet@2
      displayName: 'Use .NET Core SDK 3.1.200'
      inputs:
        packageType: sdk
        version: 3.1.200

    - task: UseDotNet@2
      displayName: 'Install .NET 6 SDK'
      inputs:
        packageType: 'sdk'
        version: '6.0.x'
        performMultiLevelLookup: true

    - task: NuGetCommand@2
      displayName: 'Restore packages'
      inputs:
        command: 'restore'

    - task: DotNetCoreCLI@2
      displayName: 'Build solution'
      inputs:
        command: 'build'
        arguments: '--configuration $(buildConfiguration) --no-restore /p:Version=$(Build.BuildNumber)'
        projects: '$(solution)'
    
    - task: DotNetCoreCLI@2  
      displayName: 'Pack packages'
      inputs:
        command: 'pack'
        versioningScheme: byBuildNumber
        arguments: '--configuration $(buildConfiguration)'
        packagesToPack: '**/*.csproj'
        nobuild: true
        packDestination: '$(Build.ArtifactStagingDirectory)'
    
    - task: NuGetCommand@2
      displayName: "Publish to Nuget Feed"
      inputs:
        command: 'push'
        feedsToUse: 'select'
        packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
        vstsFeed: 'nugetfeeds/Dev'
        publishVstsFeed: 'nugetfeeds/Dev'
    

我发现要克服的唯一方法是将 vmImage 设置为 'windows-2019',但这对我来说似乎很奇怪。为什么它不能与最新版本(windows-最新)一起使用?

类似的事情发生在我身上。 通过在 nuget 还原步骤 之前 添加 nuget 工具安装程序任务来解决它:

 - task: NuGetToolInstaller@1
  inputs:
    versionSpec: 
    checkLatest: true

添加这一步之前,nuget工具版本很旧(在nuget restore任务的输出日志中看到这一行)

Caching tool: NuGet 5.4.0 x64

修改后,同样的日志显示:

Detected NuGet version 6.1.0.106 / 6.1.0 ...

我的想法来自这里: Dotnet github issues