0

我的公司托管我们自己的内部 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文件中的唯一解决方案是什么?在同一解决方案中处理私有和公共包依赖项的最佳方法是什么?我想避免将我们使用的所有公共包上传到我们自己的仓库。

4

1 回答 1

2

nuget.target 中的一条评论指出,您需要将官方提要添加到列表中

<!-- 用于恢复包的包源。默认使用 %APPDATA%\NuGet\NuGet.Config 下的注册源 -->

<!-- 如果包源将排除官方NuGet包源(https://nuget.org/api/v2/)已指定且未出现在列表中 -->

您最近是否从 %appdata%\local\nuget\cache 清除了 nuget 缓存?当我在我的盒子上尝试这些步骤时,如果缺少的包(来自本地 repo)在本地 nuget 缓存中,它可以安装依赖项。

于 2013-01-03T23:52:37.883 回答