You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Actions还原Azure DevOps托管的私有NuGet包失败

解决GitHub Actions中Azure DevOps私有NuGet源的NU1301错误

针对你遇到的error NU1301: Unable to load the service index for source问题,以下是几个关键排查和修复步骤:

1. 确认私有源URL的正确性

Azure DevOps私有NuGet源的标准格式为:

https://pkgs.dev.azure.com/{组织名}/{项目名}/_packaging/{Feed名}/nuget/v3/index.json

检查vars.PACKAGE_URL是否完全匹配上述格式,尤其注意不要遗漏/nuget/v3/index.json后缀,这是最常见的URL错误原因。

2. 修正源配置命令的逻辑

使用dotnet nuget update source仅当源已存在时生效,如果之前未配置过该源,命令会静默失败。建议改为先删除(不存在则忽略错误)再添加源:

dotnet nuget remove source private-source-name || true
dotnet nuget add source ${{ vars.PACKAGE_URL }} --name private-source-name --username ${{ secrets.USER }} --password ${{ secrets.PAT }} --store-password-in-clear-text

3. 验证PAT的权限与使用方式

  • 确保PAT的权限范围包含Packaging (Read),且作用域覆盖目标组织或项目。
  • Azure DevOps NuGet认证中,用户名可以是任意非空字符串(甚至dummy),无需真实用户名,你可以尝试将secrets.USER替换为固定值(如azdevops)测试,排除用户名配置问题。

4. 避免硬编码凭据到NuGet.Config

不要将明文PAT提交到代码仓库,在GitHub Actions中建议通过命令行动态配置NuGet凭据:

dotnet nuget config packageSources."private-source-name".value ${{ vars.PACKAGE_URL }}
dotnet nuget config packageSourceCredentials.private-source-name.username "azdevops"
dotnet nuget config packageSourceCredentials.private-source-name.clearTextPassword ${{ secrets.PAT }}

5. 测试源的可访问性

在工作流中添加curl命令,直接测试源的连通性和权限:

curl -v ${{ vars.PACKAGE_URL }} -u ${{ secrets.USER }}:${{ secrets.PAT }}

如果返回401 Unauthorized:检查PAT权限或用户名;返回404 Not Found:确认URL中的组织/项目/Feed名称正确;返回超时:排查网络代理或Azure DevOps服务状态。

6. 指定restore的配置文件路径

如果使用解决方案级的NuGet.Config,执行restore时显式指定配置文件:

dotnet restore --configfile ./Solution/NuGet.Config

内容的提问来源于stack exchange,提问作者gormaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:47