Azure Devops上的Nuget还原失败,并显示消息“无法加载源的服务索引”

问题描述 投票:7回答:4

我有一个在私有代理中运行的.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 restore build task

这是构建代理中%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>

我已经检查了一些类似的问题,但到目前为止,我无法找到解决问题的方法。

一些说明:

  • 个人访问令牌未过期
  • 此特定构建在其他构建代理中成功运行
  • 至少有一个带有“nuget restore”任务的构建使用此代理成功运行(常规nuget还原任务,而不是.NET Core)
  • 尝试重新启动构建代理,但没有成功
  • 在恢复之前尝试了specifying a specific version of nuget,没有成功
  • 构建代理中的.NET Core SDK最新版本为2.1.500(已安装多个版本)

我错过了什么?如何解决这个问题?为什么我不能使用dotnet restore命令恢复软件包?

更新:

使用旧的Nuget Restore任务时,包可以正确恢复,如下所示:

Build definition

更新2:

我可以使用.NET Core任务v1恢复软件包:

Screenshot - restore packages using the .NET Core task v1

或者使用带有参数--force的v2任务:

Screenshot - restore packages using --force

c# .net-core nuget azure-devops build-agent
4个回答
9
投票

我找到了一个解决方案 - 将以下包源添加到%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>

另外,检查Regression in .NET SDK 500: 'dotnet tool install' fails with 401 (Unauthorized) when there is a private feed in NuGet.config #7524。此问题似乎是由.NET SDK 2.1.500引起的。

另一种解决方法是卸载该版本:

.NET Core SDK 2.1.400中不存在此问题,例如卸载.NET Core SDK 2.1.500时它会消失,并在再次安装SDK 2.1.500时重新出现。


1
投票

使用最新的“使用.NET Core sdk 2.1.504”任务为我工作。似乎有一些有缺陷的.NET Core sdk 2.1.5xx版本。


0
投票

我必须将nuget安装程序更改为4.8.1才能在将VSTS url切换到新的Azure Devops URL后才能工作。

enter image description here


-1
投票

我遇到了同样的问题,但原因不同 - 没有授予PAT适当的访问标志。 PAT需要打包(创建,读取,更新和删除订阅源和包)作用域,我之前只将PAT设置为具有构建范围(工件,定义,请求,队列构建和更新的构建属性) )错误的文物包括私人包裹饲料!

VS(2015年和2017年)的用户体验虽然没有任何帮助,但两个版本都反复弹出凭证对话框,而不是提供有关原因可能的更多信息(除了401错误响应,线索是在“未经授权”一词虽然......)。

总结使用私有DevOps包源的步骤 -

  • 在DevOps中,创建一个具有上述Packages范围的新PAT
  • 在DevOps中,还可以从Artifacts> Packages下的Connect to feed页面获取包源URL(这是'nuget sources add'的-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 sources add将Base-64编码为packageSourceCredentials密码设置。同样在您的用户配置文件中,NuGet.config文件相对安全,只要您保证它在那里是安全的,缺点是这是主机先决条件,这是nuget没有内置Azure DevOps身份验证的结果。

© www.soinside.com 2019 - 2024. All rights reserved.