包恢复在2.7和2.8之间发生了什么?

时间:2014-02-12 15:42:08

标签: visual-studio visual-studio-2012 nuget

我们正在为许多套餐使用内部Feed。今天我们注意到Package Restore不再有效。每个包都失败并出现错误:

  

无法找到版本' ...'包裹' ...'。

有问题的项目于2013-10-04首次提交,当时NuGet的版本为2.7 多个人成功地克隆了源控制仓库,它根本没有二进制文件,没有人回想起包恢复的任何问题。所以要么我们所有人都疯了,要么工作正常 当我今天尝试新克隆并更新到第一次提交时,我得到上面的错误。与最近的提交相同。这是NuGet 2.8

These are the docs concerning Package Restore changes in 2.7

  

然而,在采取上述任何步骤之前,NuGet会对此进行验证   同意是在两个层面上给出的:

     
      
  1. Visual Studio配置为允许NuGet下载缺少的包'
  2.   
  3. Visual Studio配置为在Visual Studio中构建期间自动检查缺少的包'
  4.   

在VS选项中检查这两个项目。

  

这种包恢复方法具有以下几个优点:

     
      
  1. 无需为项目或解决方案启用它。 Visual Studio将在您的项目之前自动下载缺失的包   建立和团队成员不需要了解NuGet包恢复。
  2.   

然而,这正是我们今天成功解决问题的方法:右键单击解决方案并启用Package Restore。这导致了多个级别的变化。

.csproj等级

+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>

.sln级

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6FE1C500-523A-4E05-B72E-28F14DEDB055}"
+   ProjectSection(SolutionItems) = preProject
+       .nuget\NuGet.Config = .nuget\NuGet.Config
+       .nuget\NuGet.exe = .nuget\NuGet.exe
+       .nuget\NuGet.targets = .nuget\NuGet.targets
+   EndProjectSection
+EndProject

最后,创建了.nuget\NuGet.Config.nuget\nuget.exe.nuget\NuGet.targets

作为测试,我还创建了一个新的解决方案和项目。现在我

  1. 添加一个内部包
  2. 构建
  3. 关闭解决方案
  4. 删除packagesbinobj目录(就像我们的忽略文件一样)
  5. 打开解决方案
  6. 重建,并获得问题开头提到的错误
  7. 当我用官方回购包装重复这些步骤时,一切正常。完全没有错误。

    我已经查看了2.7.12.7.22.8.0的发行说明,但我没有看到与此相关的任何内容。发生了什么事?

2 个答案:

答案 0 :(得分:2)

在当前版本的NuGet中它是confirmed bug,但它已在夜间版本中修复。

现在的解决方法是在程序包管理器控制台中将程序包源设置为 All

答案 1 :(得分:0)

这可能是由以下问题引起的:https://nuget.codeplex.com/workitem/4000

与此问题相关,nuget.exe客户端不会遵循重定向,因此如果您的内部NuGet服务器在尝试下载程序包时返回302,则客户端将不会跟随它并且不会发生任何事情。值得用Fiddler跟踪进行双重检查以查看VS扩展是否具有相同的行为。