繁体   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