2013-01-03 65 views
0

我的公司托管我们自己的内部NuGet包存储库,供我们上传我们自己的专用包。我们仍然使用官方的NuGet.org存储库来取消所有的公共包。我们还在我们的项目中启用Package Restore以允许我们的构建下载缺失的软件包。带有-source参数的NuGet安装包不会下载nuget.org

我们已经在Tools > Library Package Manager > Package Manager Settings > Package Sources的清单中添加了我们自己的NuGet回购,并且我们还在列表中保留了默认回购(NuGet official package source)。我们还在NuGet.targets文件中将我们自己的回购作为PackageSource元素。官方回购是而不是作为PackageSource包含在该文件中。

这已经为我们工作了好几个月。当我们将我们自己的软件包的新版本发布到我们的回购库时,它们对项目是可见的。此外,当新的公共软件包可用时,我们的项目在nuget.org上找到它们时没有任何问题。

然而,就在最近,构建已经开始无法从官方仓库下载软件包。当我构建解决方案,输出包含每一个它引用缺少的包,我们不承载我们自己的回购项目下面一行:

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'. 

我认为这正在发生的事情,因为我们的回购不包含任何NUnit的包和-Source参数未使用官方回购。

我的问题是:它为什么用来工作?我疯了吗?或者在最近的更新中更改NuGet.exe行为中的某些内容?我的印象是,NuGet 总是使用官方回购作为最终的回退,似乎直到昨天。

将官方NuGet回购添加到NuGet.targets文件中是唯一的解决方案吗?在同一解决方案中处理私有和公共包依赖关系的最佳方法是什么?我想避免必须上传我们用于我们自己的回购的所有公共软件包。

回答

2

在nuget.target规定如下评论,您需要到官方饲料添加到列表中

< - 用于恢复套餐包的来源。默认情况下,将使用%APPDATA%\ NuGet \ NuGet.Config下的注册信息源 - >

<! - 官方的NuGet包源代码(https://nuget.org/api/v2/)将被排除如果指定了包源并且它不出现在列表中 - >

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

+0

我在我的NuGet.targets文件中看不到那第二个'<! - '注释,因为(我假设)我的文件是从旧版本生成的。我还没有清理过我的缓存。几个星期前,我确实升级了NuGet,并且我已经(更多)最近删除了我的Solution的'packages'文件夹。我猜测他们最近刚刚改变了NuGet,迫使你明确包含官方的回购协议,并且自那时以来我一直没有清除我的'packages'文件夹......直到现在。解决方案似乎是,你必须显式引用官方回购作为PackageSource。谢谢! –

+1

对于将来的读者,在我的Windows 7 x64机器上,nuget缓存位于%LOCALAPPDATA%\ NuGet \ Cache \ – granadaCoder