我的公司托管我们自己的内部 NuGet 包存储库,供我们上传我们自己的私有专有包。我们仍然使用官方 NuGet.org 存储库来下载所有公共包。我们还在我们的项目中启用包还原,以允许我们的构建下载丢失的包。
我们已经将我们自己的 NuGet 存储库添加到列表中,Tools > Library Package Manager > Package Manager Settings > Package Sources
并且我们还在列表中保留了默认的(NuGet 官方包源)。我们在文件中也有我们自己的 repoNuGet.targets
作为一个PackageSource
元素。不过,官方 repo不包含PackageSource
在该文件中。
这已经为我们工作了几个月。当我们将自己的包的新版本发布到我们的仓库时,它们对项目是可见的。此外,当新的公共包可用时,我们的项目在nuget.org上找到它们没有任何问题。
然而,就在最近,该版本开始无法从官方 repo 下载包。当我构建解决方案时,每个项目的输出都包含以下行,这些项目引用了我们未在自己的存储库中托管的缺失包:
C:\code\MyCodebase\.nuget\nuget.targets(79,9): error MSB3073: The command ""C:\code\MyCodebase\.nuget\nuget.exe" install "C:\code\MyCodebase\MyProject\packages.config" -source "http://nuget.example.com/repo/" -o "C:\code\MyCodebase\packages"" exited with code -1.
如果我自己从命令行运行该命令,我会看到这个输出呈鲜红色:
Unable to find version '2.5.10.11092' of package 'NUnit'.
Unable to find version '1.2.0' of package 'Common.Logging'.
我认为这是因为我们的 repo 不包含任何 NUnit 包,并且-Source
参数没有使用官方 repo。
我的问题是:为什么它曾经有效?我疯了吗?还是NuGet.exe
在最近的更新中行为发生了变化?我的印象是 NuGet总是使用官方回购作为最终的后备方案,直到昨天才出现这种情况。
将官方 NuGet 存储库添加到NuGet.targets
文件中的唯一解决方案是什么?在同一解决方案中处理私有和公共包依赖项的最佳方法是什么?我想避免将我们使用的所有公共包上传到我们自己的仓库。