У нас есть пакет nuget Azure DevOps, который без проблем использует другая служба, представляющая собой сетевой API. Однако когда этот пакет добавляется в рабочую службу, конвейер pr завершается сбоем на этапе «Восстановление зависимостей» с ошибкой NU1100.
Файл конвейера
trigger:
branches:
exclude:
- '*'
paths:
include:
- '*'
pr:
branches:
include:
- '*'
pool:
vmImage: ubuntu-latest
variables:
- name: vmImageName
value: 'ubuntu-latest'
stages:
- stage: PR
displayName: Build and test
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
packageType: 'sdk'
version: '8.x'
performMultiLevelLookup: true
- task: NuGetToolInstaller@1
displayName: 'Install NuGet'
inputs:
versionSpec: '6.8.0'
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: DotNetCoreCLI@2
displayName: 'Restore Dependencies'
inputs:
command: 'restore'
projects: '**/*.csproj'
feedsToUse: 'config'
nugetConfigPath: 'nuget.config'
includeNuGetOrg: true
noCache: true
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration) --no-restore'
- job: Test
displayName: Test
pool:
vmImage: $(vmImageName)
steps:
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: DotNetCoreCLI@2
displayName: "Run Unit Tests"
inputs:
command: test
projects: '**/*.UnitTests.csproj'
arguments: '--configuration $(buildConfiguration)'
nuget.config:
<?xml version = "1.0" encoding = "utf-8"?>
<configuration>
<packageRestore>
<add key = "enabled" value = "True" />
<add key = "automatic" value = "True" />
</packageRestore>
<packageSources>
<clear />
<add key = "nuget.org" value = "https://api.nuget.org/v3/index.json" />
<add key = "Custom"
value = "https://pkgs.dev.azure.com/acme/guid/_packaging/Custom/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<NxPro>
<add key = "Username" value = "build" />
<add key = "ClearTextPassword" value = "%PAT%" />
</NxPro>
</packageSourceCredentials>
<packageSourceMapping>
<packageSource key = "Custom">
<package pattern = "Custom.*" />
</packageSource>
<packageSource key = "nuget.org">
<package pattern = "*" />
</packageSource>
</packageSourceMapping>
</configuration>
ошибка:
Build FAILED.
"/home/vsts/work/1/s/src/Infrastructure/ServiceWorker.Infrastructure.csproj" (Restore target) (1) ->
(Restore target) ->
/home/vsts/work/1/s/src/Infrastructure/ServiceWorker.Infrastructure.csproj : error NU1100: Unable to resolve 'Custom.Contracts (>= 1.0.31)' for 'net8.0'. PackageSourceMapping is enabled, the following source(s) were not considered: feed-Custom, nuget.org.
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:07.64
##[error]Error: The process '/opt/hostedtoolcache/dotnet/dotnet' failed with exit code 1
##[error]Packages failed to restore
Info: Azure Pipelines hosted agents have been updated and now contain .Net 5.x SDK/Runtime along with the older .Net Core version which are currently lts. Unless you have locked down a SDK version for your project(s), 5.x SDK might be picked up which might have breaking behavior as compared to previous versions. You can learn more about the breaking changes here: https://docs.microsoft.com/en-us/dotnet/core/tools/ and https://docs.microsoft.com/en-us/dotnet/core/compatibility/ . To learn about more such changes and troubleshoot, refer here: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops#troubleshooting
Finishing: Restore Dependencies
Другая служба, использующая тот же пакет, имеет другой файл конвейера, в котором вместо восстановления DotNetCoreCli@2 используется NuGetCommand@2. Этот подход по непонятной мне причине не работал с этой службой и продолжал вызывать ошибку версии MsBuild.
У них абсолютно одинаковые nuget.config
файлы
А как насчет версии .NET, используемой в обоих решениях? Это то же самое? В сообщении об ошибке написано Unable to resolve 'Custom.Contracts (>= 1.0.31)' for 'net8.0'
.
Они оба используют net8.0
ошибка NU1100: невозможно разрешить «Custom.Contracts (>= 1.0.31)» для «net8.0». PackageSourceMapping включен, следующие источники не учитывались: Feed-Custom, nuget.org.
Вместо DotNetCoreCLI@2
для восстановления пакета используйте dotnet restore command
:
- task: PowerShell@2
displayName: 'dotnet restore'
inputs:
targetType: 'inline'
script: 'dotnet restore **/yourproject.csproj --configfile **/nuget.config'
env:
PAT: $(token)
Подробности можно посмотреть в аналогичном билете.
Что касается информации .Net 5.x SDK/Runtime
, то это не ошибка, а информация, которую вы можете прочитать.
Результат восстановления на моей стороне:
Я удалил `<packageSourceMapping>, но на этот раз это не удалось из-за этой ошибки: ``` /home/vsts/work/1/s/src/Core/ServiceWorker.Core.csproj: ошибка NU1507: предупреждение как ошибка: есть 2 пакета источники, определенные в вашей конфигурации. При использовании централизованного управления пакетами сопоставьте источники пакетов с помощью сопоставления источников пакетов (aka.ms/nuget-package-source-mapping) или укажите один источник пакета. Определены следующие источники: nuget.org, Feed-Custom ```
Я отменил это изменение и попробовал добавить только токен PAT, но в итоге получил исходную ошибку.
Вы можете добавить <packageSourceMapping>...</packageSourceMapping>
обратно, но для восстановления пакета используйте команду dotnet restore YourProject.csproj --configfile ./path/to/nuget.config
вместо DotNetCoreCLI@2
. Я отредактирую ответ с подробностями.
The other service that uses the same package has a different pipeline...
- есть ли различия между файламиnuget.config
, используемыми в каждом решении?