[英]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 包如下:
嘗試恢復 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(未授權)。
構建任務如下:
這是構建代理中%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>
我已經檢查了一些類似的問題,但到目前為止我無法找到解決我的問題的方法。
一些注意事項:
我錯過了什么? 如何解決這個問題? 為什么我不能使用dotnet restore
命令恢復包?
使用舊的Nuget 恢復任務時,包恢復沒有錯誤,如下所示:
我可以使用 .NET 核心任務 v1 恢復包:
或使用帶有參數的 v2 任務--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 時再次出現。
使用最新的“使用 .NET Core sdk 2.1.504”任務對我有用。 似乎有一些有問題的 .NET Core sdk 2.1.5xx 版本。
我遇到了同樣的問題,但出於不同的原因 - 沒有授予 PAT 適當的訪問標志。 PAT 需要打包(創建、讀取、更新和刪除提要和包)范圍,我之前只將 PAT 設置為具有構建范圍(工件、定義、請求、構建隊列和更新的構建屬性) ) 將 Artifacts 誤認為包括私有包提要!
VS(2015 年和 2017 年)中的用戶體驗根本沒有幫助,兩個版本都反復彈出憑據對話框,而不是提供有關原因可能是什么的更多信息(除了 401 錯誤響應,線索是雖然在“未經授權”這個詞中......)。
總結使用私有 DevOps 包提要的步驟 -
使用 - 將包源(帶有憑據)添加到您的 %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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.