[英]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.