Azure DevOps跨项目使用PRG项目NuGet包时Pipeline报404错误求助
解决Azure DevOps Pipeline中NU1301(404)错误的方案
核对NuGet.config的源URL准确性
- 确认NuGet.config里PRG项目NuGet源的URL是完整的项目级路径,格式应为
https://pkgs.dev.azure.com/{组织名}/{PRG项目名}/_packaging/{源名称}/nuget/v3/index.json,不少情况会遗漏项目名部分,导致指向组织级源而非目标项目源,触发404错误。 - 直接在浏览器访问该URL,验证是否能正常加载索引页面,排除URL本身的错误。
验证Pipeline运行身份的权限
- Pipeline默认使用项目构建服务账号(格式:
{组织名}\{目标项目名} Build Service ({组织名})),而非普通用户账号,需给这个账号在PRG项目的NuGet源中添加读取权限:- 进入PRG项目的「工件」页面,找到对应NuGet源
- 点击源右上角的设置图标,进入权限管理界面
- 添加目标项目的构建服务账号,授予「读取」权限
- 若使用自托管代理,还要确认代理机器的服务账号能正常访问该源。
检查Pipeline对NuGet.config的加载逻辑
- 确保Pipeline任务(如NuGet Restore或DotNet Restore)明确指定NuGet.config路径,比如在DotNet Restore任务中设置
--configfile $(Build.SourcesDirectory)/NuGet.config,避免默认使用系统或代理级配置文件。 - 若NuGet.config包含多个源,建议添加
<clear />标签清除默认源,避免冲突:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="PRG-NuGet-Source" value="https://pkgs.dev.azure.com/xxx/PRG/_packaging/xxx/nuget/v3/index.json" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> </configuration>
排查网络与代理限制
- 若使用自托管代理,确认代理机器能正常访问Azure DevOps工件源URL,无防火墙或代理服务器拦截。可在代理机器上手动执行
dotnet restore命令,测试能否拉取包。 - 托管代理一般无需额外设置,但需确认组织防火墙规则允许托管代理访问工件源域名。
检查NuGet源的可见性设置
- 进入PRG项目的NuGet源设置,确认源的可见性为「组织可见」;若设为「项目可见」,其他项目的服务账号无法访问,需修改为组织可见,或添加目标项目的服务账号到权限列表。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

