Создайте пакет NuGet для проекта netcore 3.0, который зависит от стандартных пакетов - PullRequest
2 голосов
/ 30 января 2020

Мое решение состоит из многих проектов, нацеленных на netcore 3.0, некоторые из этих проектов имеют ссылку на другие пакеты nuget, предназначенные для netstandard 2.0.

Я хочу создать один пакет nuget для проекта, ссылающийся на другие проекты. В моем Azure DevOps конвейере у меня есть следующая задача для создания nupkg файла

- task: NuGetCommand@2
  displayName: 'Create NuGet Package'
  inputs:
    command: 'pack'
    packagesToPack: 'Core.Hosting/Core.Hosting.nuspec'
    versioningScheme: 'off'
    includeReferencedProjects: true
    includeSymbols: true

, за которым следует задача pu sh с артефактами в Azure Devops:

- task: NuGetCommand@2
  inputs:
    command: 'push'
    packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
    nuGetFeedType: 'internal'
    publishVstsFeed: 'reference-to-feed-is-removed'
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'), eq('true', variables['PUSH_TO_NUGET']))

Мой файл nuspe c выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>Core Hosting</id>
    <version>1.0.0-prerelease-5.0.0</version>
    <title>Core Hosting</title>
    <authors>Core Team</authors>
    <owners>My Company a/s</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <projectUrl>project-url-removed/projectUrl>
    <description>Core backend components to interact with various services in Azure.</description>
    <copyright>Copyright 2020</copyright>
    <dependencies>
      <group targetFramework=".NETCoreApp3.0">
        <dependency id="AspNetCore.Firebase.Authentication" version="2.0.1"/>
        <dependency id="Autofac" version="4.9.4"/>
        <dependency id="Autofac.Extensions.DependencyInjection" version="5.0.1"/>
        <dependency id="Autofac.Mef" version="4.1.0"/>
        <dependency id="LinqKit.Core" version="1.1.17"/>
        <dependency id="Microsoft.ApplicationInsights.AspNetCore" version="2.12.0"/>
        <dependency id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.12.0"/>
        <dependency id="Microsoft.AspNetCore.Authentication.JwtBearer" version="3.0.0"/>
        <dependency id="Microsoft.EntityFrameworkCore" version="3.1.1"/>
        <dependency id="Microsoft.EntityFrameworkCore.Cosmos" version="3.1.1"/>
        <dependency id="Microsoft.EntityFrameworkCore.Relational" version="3.1.1"/>
        <dependency id="Microsoft.Extensions.DependencyModel" version="3.1.1"/>
        <dependency id="Microsoft.Extensions.Options" version="3.1.1"/>
        <dependency id="Swashbuckle.AspNetCore" version="5.0.0"/>
        <dependency id="System.ComponentModel.Composition" version="4.6.0"/>
        <dependency id="System.Composition.AttributedModel" version="1.3.0"/>
        <dependency id="Microsoft.ApplicationInsights" version="2.12.0"/>
        <dependency id="Microsoft.AspNetCore.Mvc.Core" version="2.2.5"/>
        <dependency id="Microsoft.Azure.KeyVault" version="3.0.4"/>
        <dependency id="Microsoft.Azure.Services.AppAuthentication" version="1.3.1"/>
        <dependency id="System.Configuration.ConfigurationManager" version="4.6.0"/>
        <dependency id="FirebaseAdmin" version="1.9.1"/>
        <dependency id="Microsoft.OpenApi" version="1.1.4"/>
        <dependency id="Swashbuckle.AspNetCore.SwaggerGen" version="5.0.0"/>
        <dependency id="Microsoft.Extensions.Configuration.Abstractions" version="3.1.1"/>
        <dependency id="SendGrid" version="9.12.0"/>
        <dependency id="MassTransit.Azure.ServiceBus.Core" version="6.0.0-develop.2244"/>
        <dependency id="Microsoft.Azure.WebJobs" version="3.0.14"/>
        <dependency id="System.ComponentModel.Composition" version="4.6.0"/>
      </group>
    </dependencies>
  </metadata>
</package>

Я хочу использовать этот пакет nuget в моем другом проекте netcore 3.0, который отлично работает локально, добавив его из Nuget Package Manager. Все строится и работает так, как ожидалось, за исключением случаев, когда я пытаюсь запустить конвейер для этого проекта:

trigger:
  branches:
    include:
      - "*"

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'
steps:

- task: UseDotNet@2
  displayName: 'Install dotnet 3.x SDK'
  inputs:
    packageType: sdk
    version: '3.x'
    includePreviewVersions: true
    installationPath: $(Agent.ToolsDirectory)/dotnet

- task: NuGetCommand@2
  displayName: 'Restore NuGet packages'
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'
    vstsFeed: 'feed-id-removed'

- script: dotnet test --filter FullyQualifiedName~UnitTests
  displayName: "Run Unit Tests"

- script: dotnet publish Example.Service.Host/Example.Service.Host.csproj --configuration Release -o 'output/publish' --runtime linux-x64 -f netcoreapp3.0
  displayName: "Build Example.Service"

- task: CopyFiles@2
  inputs:
    SourceFolder: ''
    Contents: 'Dockerfile'
    TargetFolder: 'output'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: 'output'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: 'Example.Service/$(Build.BuildId).zip'
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: 'Example.Service/$(Build.BuildId).zip'
    ArtifactName: 'drop'

Запуская задачу восстановления NuGet в моем конвейере, я ошибаюсь, жалуясь на проблемы совместимости, подобные этой:

Package AspNetCore.Firebase.Authentication 2.0.1 is not compatible with netcoreapp3.0 (.NETCoreApp,Version=v3.0). Package AspNetCore.Firebase.Authentication 2.0.1 supports: netstandard2.0

Все ошибки одинаковы, зависимый пакет X несовместим с netcoreapp3.0, так как он нацелен на netstandard2.0.

Мне довольно странно, что он работает локально при сборке и восстановлении пакетов в Visual Studio, но не при запуске из конвейера. Я также подумал, что библиотеки, предназначенные для netstandard2.0, будут совместимы с netcoreapp3.0 apps

Есть ли способ заставить это работать в моем Azure Devops-конвейере или я облажался? 1028 *

1 Ответ

1 голос
/ 02 февраля 2020

Возможно, проблема связана с устаревшей версией агента NuGet. Вы можете попробовать использовать задачу NuGet Install Tool и настроить агент на v5.x, прежде чем использовать задачу восстановления NuGetCommand.

- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 5.x'
  inputs:
    versionSpec: 5.x
    checkLatest: true

Другим возможным исправлением является использование do tnet restore вместо восстановления nuget.

- task: DotNetCoreCLI@2
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: 'select'
    vstsFeed: 'azure feed'

Вы можете обратиться к этой теме для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...