Azure DevOps Pipeline 错误“包 (...) 与 net60 不兼容”

use*_*400 10 yaml azure-devops azure-pipelines

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

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

运行管道时,恢复包时会抛出错误:

##[错误]nuget 命令失败,退出代码(1) 和错误(D:\a\1\s\nuget-tst\src\nuget-tst.csproj 包 Microsoft.Extensions.Configuration.Json 3.1 中的错误。 3 与 net60 (.NETFramework,Version=v6.0) 不兼容。包 Microsoft.Extensions.Configuration.Json 3.1.3 支持: - netcoreapp3.1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (. NETStandard,Version=v2.0) 包 Microsoft.Extensions.Configuration.FileExtensions 3.1.3 与 net60 (.NETFramework,Version=v6.0) 不兼容。包 Microsoft.Extensions.Configuration.FileExtensions 3.1.3 支持: - netcoreapp3 .1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (.NETStandard,Version=v2.0) 包 Microsoft.Extensions.Configuration.EnvironmentVariables 3.1.3 与 net60 (.NETFramework,Version=v6.1) 不兼容0). 软件包 Microsoft.Extensions.Configuration.EnvironmentVariables 3.1.3 支持: - netcoreapp3.1 (.NETCoreApp,Version=v3.1) - netstandard2.0 (.NETStandard,Version=v2.0) 一个或多个软件包不兼容使用.NETFramework,版本=v6.0。包 Microsoft.IdentityModel.Tokens 6.5.0 与 netcoreapp3.1 (.NETCoreApp,版本=v3.1) 不兼容。包 Microsoft.IdentityModel.Tokens 6.5.0 支持: - net45 (.NETFramework,Version=v4.5) - net461 (.NETFramework,Version=v4.6.1) - netstandard2.0 (.NETStandard,Version=v2.0) 包Microsoft.Extensions.FileSystemGlobbing 3.1.3 与 netcoreapp3.1 (.NETCoreApp,版本=v3.1) 不兼容。软件包 Microsoft.Extensions.FileSystemGlobbing 3.1.3 支持:netstandard2.0 (.NETStandard,Version=v2.0) 一个或多个软件包与 .NETCoreApp,Version=v3.1 不兼容。) ##[error]软件包无法恢复

天蓝色管道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'
    
Run Code Online (Sandbox Code Playgroud)

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

Jul*_*hay 28

类似的事情也发生在我身上。通过在nuget 恢复步骤之前添加 nuget 工具安装程序任务来解决此问题 :

 - task: NuGetToolInstaller@1
  inputs:
    versionSpec: 
    checkLatest: true
Run Code Online (Sandbox Code Playgroud)

在添加此步骤之前,nuget工具版本非常旧(从nuget恢复任务的输出日志中看到这一行)

Caching tool: NuGet 5.4.0 x64
Run Code Online (Sandbox Code Playgroud)

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

Detected NuGet version 6.1.0.106 / 6.1.0 ...
Run Code Online (Sandbox Code Playgroud)

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

  • 我今天第一次遇到这个问题......您,先生是英雄! (4认同)