Мое решение состоит из многих проектов, нацеленных на 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 *