执行dotnet build时无法找到私有NuGet包,如何配置私有源?
解决.NET Core 2.0独立部署时找不到私有NuGet包的问题
这问题我之前帮同事处理过,本质就是要让dotnet命令知道你的私有NuGet源位置,下面几种方法你可以根据场景选择:
1. 全局配置私有NuGet源(所有项目生效)
如果你的开发环境经常用到这个私有源,可以直接全局添加:
dotnet nuget add source https://你的私有NuGet服务器地址 --name PrivateNuGet
要是私有源需要账号密码认证,添加的时候可以直接带上凭据:
dotnet nuget add source https://你的私有NuGet服务器地址 --name PrivateNuGet --username 你的账号 --password 你的密码
配置后,所有dotnet项目都会自动使用这个源,不用每次重复设置。
2. 项目本地配置(推荐,仅当前项目生效)
如果不想影响其他项目,更推荐在项目根目录创建一个nuget.config文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!-- 保留官方NuGet源,避免其他公共包找不到 --> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <!-- 添加你的私有源 --> <add key="PrivateNuGet" value="https://你的私有NuGet服务器地址" /> </packageSources> <!-- 私有源需要认证的话,添加凭据(不建议明文密码,后面说替代方案) --> <packageSourceCredentials> <PrivateNuGet> <add key="Username" value="你的账号" /> <add key="ClearTextPassword" value="你的密码" /> </PrivateNuGet> </packageSourceCredentials> </configuration>
创建好这个文件后,dotnet build会自动读取配置。如果不想明文存储密码,可以用命令更新源的凭据:
dotnet nuget update source PrivateNuGet --username 你的账号 --password 你的密码 --store-password-in-clear-text
(注:--store-password-in-clear-text在Windows下会把密码存在用户目录的配置文件里,Linux/macOS则会存在明文文件中,要是对安全性要求高,可以用系统凭据管理器存储,不过.NET Core 2.0对这个的支持有限,你可以根据环境调整)
3. 构建命令临时指定源(单次生效)
如果只是临时测试,也可以在dotnet build命令里直接指定源:
dotnet build -r win10-x64 --source https://你的私有NuGet服务器地址 --source https://api.nuget.org/v3/index.json
注意这里要同时指定官方源和私有源,不然其他公共包会找不到。
额外注意事项
- 先确认你的私有NuGet服务器地址能正常访问,比如用浏览器打开地址,看看能不能看到目标包的信息;
- 检查项目里引用的包版本号是否正确,有没有拼写错误,很多时候“找不到包”只是版本号写错了;
- 确保你用的.NET Core SDK是2.x版本,和
netcoreapp2.0匹配,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者Ben




