【发布时间】:2012-12-17 23:00:11
【问题描述】:
我的公司托管我们自己的内部 NuGet 包存储库,供我们上传我们自己的私有专有包。我们仍然使用官方 NuGet.org 存储库来下载所有公共包。我们还在我们的项目中启用了Package Restore,以允许我们的构建下载缺失的包。
我们已将自己的 NuGet 存储库添加到 Tools > Library Package Manager > Package Manager Settings > Package Sources 的列表中,并且我们还在列表中保留了默认的 (NuGet official package source)。我们在NuGet.targets 文件中也有我们自己的存储库作为PackageSource 元素。不过,官方仓库不作为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总是使用官方 repo 作为最终的后备方案,直到昨天才出现这种情况。
将官方 NuGet 存储库添加到 NuGet.targets 文件中是唯一的解决方案吗?在同一解决方案中处理私有和公共包依赖项的最佳方法是什么?我想避免将我们使用的所有公共包上传到我们自己的仓库。
【问题讨论】:
标签: visual-studio nuget