簡體   English   中英

Nuget 在 Azure Devops 上恢復失敗,並顯示消息“無法加載源的服務索引”

[英]Nuget restore fails on Azure Devops with message "unable to load the service index for source"

我有一個在私有代理中運行的 .NET 解決方案的構建。 該解決方案包含 .NET Core 2.1 和 .NET Standard 2.0 項目。

安裝的一些 nuget 包如下:

  • NETStandard.Library v2.0.3
  • Microsoft.AspNetCore.Mvc v2.0.0
  • Microsoft.NETCore.App v2.1.5

嘗試恢復 nuget 包時構建失敗,並出現以下錯誤:

"F:\Agent01\w\141\s\xxxxxxx.sln" (恢復目標) (1) -> (恢復目標) -> C:\Program Files\dotnet\sdk\2.1.500\NuGet.targets(114 ,5): 錯誤:無法加載源https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json的服務索引。 C:\Program Files\dotnet\sdk\2.1.500\NuGet.targets(114,5):錯誤:響應狀態碼不表示成功:401(未授權)。

構建任務如下:

Nuget 恢復構建任務

這是構建代理中%appdata%\NuGet\nuget.config文件的內容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <MyFeed>
      <add key="Username" value="LocalBuildAgent" />
      <add key="ClearTextPassword" value="xxxxxxxxxxx" />
    </MyFeed>
  </packageSourceCredentials>
</configuration>

我已經檢查了一些類似的問題,但到目前為止我無法找到解決我的問題的方法。

一些注意事項:

  • 個人訪問令牌未過期
  • 此特定構建在其他構建代理中成功運行
  • 至少有 1 個帶有“ nuget restore ”任務的構建使用此代理成功運行(常規nuget 恢復任務,不是 .NET 核心)
  • 嘗試重新啟動構建代理,但沒有成功
  • 嘗試恢復前指定特定版本的nuget ,沒有成功
  • .NET Core SDK 構建代理中最新版本為2.1.500(安裝多個版本)

我錯過了什么? 如何解決這個問題? 為什么我不能使用dotnet restore命令恢復包?

更新:

使用Nuget 恢復任務時,包恢復沒有錯誤,如下所示:

構建定義

更新 2:

我可以使用 .NET 核心任務 v1 恢復包:

屏幕截圖 - 使用 .NET Core 任務 v1 恢復包

或使用帶有參數的 v2 任務--force

屏幕截圖 - 使用 --force 恢復包

我找到了一個解決方案 - 將以下包源添加到%appdata%\\NuGet\\nuget.config

<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />

完整的文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <MyFeed>
      <add key="Username" value="LocalBuildAgent" />
      <add key="ClearTextPassword" value="xxxxxxxxxxx" />
    </MyFeed>
  </packageSourceCredentials>
</configuration>

此外,請檢查.NET SDK 500 中的回歸:當 NuGet.config #7524 中存在私有源時,'dotnet tool install' 失敗並顯示 401(未經授權) 此問題似乎是由 .NET SDK 2.1.500 引起的。

另一種解決方法是卸載該版本:

該問題在 .NET Core SDK 2.1.400 中不存在,例如,當卸載 .NET Core SDK 2.1.500 時它會消失,並在再次安裝 SDK 2.1.500 時再次出現。

我不得不將 nuget 安裝程序更改為 4.8.1,以便在將 VSTS url 切換到新的 Azure Devops url 后使其工作。

在此處輸入圖片說明

使用最新的“使用 .NET Core sdk 2.1.504”任務對我有用。 似乎有一些有問題的 .NET Core sdk 2.1.5xx 版本。

我遇到了同樣的問題,但出於不同的原因 - 沒有授予 PAT 適當的訪問標志。 PAT 需要打包(創建、讀取、更新和刪除提要和包)范圍,我之前只將 PAT 設置為具有構建范圍(工件、定義、請求、構建隊列和更新的構建屬性) ) 將 Artifacts 誤認為包括私有包提要!

VS(2015 年和 2017 年)中的用戶體驗根本沒有幫助,兩個版本都反復彈出憑據對話框,而不是提供有關原因可能是什么的更多信息(除了 401 錯誤響應,線索是雖然在“未經授權”這個詞中......)。

總結使用私有 DevOps 包提要的步驟 -

  • 在 DevOps 中創建一個具有上述 Packages 范圍的新 PAT
  • 在 DevOps 中,還可以從“工件”>“包”下的“連接到提要”頁面獲取包源 URL(這是“nuget 源添加”的 -source 參數所必需的)
  • 使用 - 將包源(帶有憑據)添加到您的 %APPDATA%\\NuGet\\NuGet.config

     nuget.exe sources add -name {your_package_feed_name} -source https://pkgs.dev.azure.com/{your_org}/_packaging/{your_feed}/nuget/v3/index.json -username PATForPackages -password {the_pat_value_you_got_from_azure_devops}

注意:nuget 源添加會將 PAT 進行 Base-64 編碼到 packageSourceCredentials Password 設置中。 同樣在您的用戶配置文件中,NuGet.config 文件相對安全,前提是您將其保護在那里,但缺點是這是主機先決條件,這是 nuget 沒有內置 Azure DevOps 身份驗證的結果。

對於那些在 2021 年因相同錯誤消息來到這里的人,在 pack 命令之前添加 NuGetAuthenticate@0 任務可能是缺失的部分:

- task: NuGetAuthenticate@0

- task: DotNetCoreCLI@2
  inputs:
    command: 'pack'
    packagesToPack: $(projectPath)
    includesymbols: true
    includesource: true
    versioningScheme: 'off'
    verbosityPack: Normal
  displayName: 'Dotnet Pack'

當我嘗試構建使用 Azure DevOps 中托管的 NuGet package 的解決方案時,以下是幫助我在 Visual Studio 中解決相同問題的步驟。

  1. 確保您對 Azure DevOps 中的提要擁有所有者或貢獻者權限。

在此處輸入圖像描述

  1. 然后在 Visual Studio 中確保使用具有上一步權限的帳戶登錄。

在此處輸入圖像描述

  1. 最后重建解決方案。

希望這也能解決您的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM