在nuget.config的节点下用添加私有源,url须以https://开头且含/v3/index.json;多源按从上到下顺序查找,404继续下一源,200空响应则报错;认证凭据不可明文存储,需通过系统凭据管理器或专用插件配置。

nuget.config 里怎么写私有源地址
直接在 <packagesources></packagesources> 节点下加一个 <add></add>,name 是自定义别名,value 是私有源 URL(必须以 http:// 或 https:// 开头):
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="my-private-feed" value="https://pkgs.example.com/nuget/v3/index.json" />
</packageSources>
</configuration>
注意:value 必须是 NuGet V3 协议的索引地址(带 /v3/index.json),不是网页首页或 API 基础路径。V2 源(如 http://xxx/nuget)仍可工作,但已弃用,新私有源基本都只支持 V3。
多个私有源共存时,顺序会影响查找行为
NuGet 按 <packagesources></packagesources> 中的**从上到下顺序**依次查找包。一旦某个源返回 404(找不到包),就继续下一个;但如果返回 200 且结果为空(比如认证失败、权限不足),它不会自动跳过,而是直接报错。
- 把最常用、最稳定的私有源放在前面
- 避免把内网源放最后——如果前几个公网源响应慢或超时,会拖慢整个 restore
- 不需要的源建议用
<clear></clear>清掉默认项,再显式列出所有要用的源,避免隐式继承干扰
私有源需要认证时,凭据不能写在 nuget.config 里
nuget.config 不支持明文存密码。Windows 上靠 Windows 凭据管理器(nuget.exe sources add -UserName -Password 会自动存);macOS/Linux 用 dotnet nuget add source 配合 --store-password-in-clear-text(不推荐)或依赖系统密钥环(如 libsecret)。
常见错误现象:Unable to load the service index for source ... Response status code does not indicate success: 401 (Unauthorized)
- 确认是否已执行
dotnet nuget add source并完成登录(非仅配置 URL) - CI 环境中,改用
NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED=true+ Azure Artifacts Credential Provider 等插件 - 不要手动往
<packagesourcecredentials></packagesourcecredentials>节点塞 base64 密码——NuGet 会忽略,且存在泄露风险
配置文件放哪,优先级怎么算
NuGet 按以下顺序合并多个 nuget.config(后加载的覆盖前一个的同名项):
- MSBuild 项目目录下的
nuget.config - 父目录逐级向上找,直到盘根(如
C:\nuget.config) -
%APPDATA%\NuGet\NuGet.Config(Windows)或~/.nuget/NuGet/NuGet.Config(macOS/Linux)
项目级配置最灵活,也最容易被 git 忽略或误提交敏感信息。全局配置适合统一代理或公司级源,但多人协作时要注意别把个人私有源写进团队共享的 nuget.config。
路径层级和覆盖逻辑容易被忽略,尤其是 CI 构建机上残留了旧的全局配置,会导致本地能还原、CI 报 404。










