NuGet在命令行与Jenkins中使用不同nuget.config,咨询配置存储位置
NuGet配置文件的加载逻辑与存储位置
这个问题我之前排查过,刚好能给你捋清楚!NuGet的配置文件是有优先级层级的,不同场景下会加载不同位置的配置,这就是你遇到命令行和Jenkins用不同配置的核心原因。
1. 不同层级的配置文件存储位置
NuGet会按「从低到高」的优先级加载多份配置,最终生效的是合并后的结果(高优先级配置会覆盖低优先级的对应项):
- 全局系统级(最低优先级)
- Windows:
%appdata%\NuGet\NuGet.Config - macOS/Linux:
~/.config/NuGet/NuGet.Config或~/.nuget/NuGet/NuGet.Config
这是系统默认的基础配置,不管用命令行还是CI工具都会先加载它。
- Windows:
- 项目/解决方案级(较高优先级)
如果你的项目或解决方案根目录下存在nuget.config文件,NuGet会优先加载这份配置,覆盖全局配置里的对应设置。 - 命令行指定级(最高优先级)
要是执行nuget restore时加了-ConfigFile <配置文件路径>参数,NuGet会直接使用你指定的这份配置,忽略其他层级的文件。
为什么命令行和Jenkins用的配置不一样?
大概率是这两个环境的执行上下文有差异:
- 工作目录不同:命令行执行时你可能在项目根目录,NuGet加载了项目里的
nuget.config;但Jenkins的工作目录可能没指向项目根,自然不会加载这份配置。 - 运行账号不同:你用个人账号操作命令行,但Jenkins一般用系统账号运行,两者的全局
NuGet.Config存储路径是对应各自账号的目录,内容自然不一样。
快速验证配置来源的方法
在两种环境下分别执行以下命令,就能看到NuGet实际加载的所有配置文件路径和优先级:
nuget config -list -verbosity detailed
对比命令行和Jenkins的输出,就能直接找到配置差异的根源了。
内容的提问来源于stack exchange,提问作者Action Heinz
相关产品推荐
相关产品推荐

