nuget恢复在构建时失败但手动工作

时间:2014-04-25 22:41:08

标签: nuget nuget-package-restore

VS 2013无法恢复软件包 - 软件包内容未实现 - 尽管VS / nuget似乎认为它确实已成功恢复软件包。

如果我手动卸载并重新安装该软件包的相同版本,它就可以正常工作。

一个简单的复制品可以是downloaded as a zip。这个repro有一个

  • 的单一解决方案
  • 带有

  • 的单个项目
  • 单个文件,“packages.config”,指定

  • 单个包,“breeze.edmbuilder -version 1.0.4”,包含单个文件, edmbuilder.cs

  • 单个文件夹,“App_Start”,只包含

  • .csproj说它应该有“edmbuilder.cs”,这是可以的,因为

  • 恢复包时会有“edmbuilder.cs”。

当我构建时,VS报告“edmbuilder.cs”丢失了......实际上它已经丢失了。

然而,包下载了;我知道这是因为构建产生了一个包含“Breeze.EdmBuilder.1.0.4”的“packages”文件夹,其中我看到“edmbuilder.cs”存在并且位于正确的位置。

当我发出命令install-package breeze.edmbuilder -version 1.0.4时,nuget报告

  已经安装了

'Breeze.EdmBuilder 1.0.4'。 NugetRestoreFail已经引用了'Breeze.EdmBuilder 1.0.4'。

此包装AFAIK没有任何问题。对于我uninstall-package breeze.edmbuilder然后重新安装install-package breeze.edmbuilder -version 1.0.4的情况,安装有效,缺少的 edmbuilder.cs 会出现在它所属的“App_Start”文件夹中。

失败是可重复的到位

  • 关闭解决方案
  • 从“App_Start”
  • 删除 edmbuilder.cs
  • 删除“packages”文件夹
  • 可选择删除.suo和bin和obj目录
  • 重新打开解决方案并重新构建

您将获得相同的失败行为......以及手动卸载和重新安装的相同功能。

FWIW,从.csproj中删除对 edmbuilder.cs 的引用无效。

无论我做什么,我都必须手动卸载并重新安装软件包。

WTF!

p.s:我正在使用VS 2013 Update 2 RC。我怀疑“RC”是否很重要,因为这个问题引起了我对客户的注意。你永远不会知道。

p.p.s:这不是关于构建失败的问题,我不关心这个解决方案永远不会运行。你在这里看到的是一个真正的应用程序的精简版本。唯一的问题是“为什么没有恢复文件?”

2 个答案:

答案 0 :(得分:2)

程序包还原与安装程序包相同。你所看到的是设计。它只是在 packages 文件夹中下载任何缺少的包。不再。不能少。

添加了包恢复,因此您无需将packages文件夹提交到源代码管理。

预计你会安装一个软件包,然后提交对项目文件所做的更改以及可能已添加的任何文件,如 edmbuilder.cs ,基本上是项目文件夹中的任何内容。您将排除packages文件夹。

现在,当您从源代码管理中获取源代码时,除了包文件之外,所有内容都将存在。包恢复将下载这些,现在您的工作副本已完成。

请参阅NuGet's Restore Package insists on specific package versions

答案 1 :(得分:1)

这是愚蠢的还是什么?

感谢@Kiliman解释我的可怕体验是“按设计”。

那么你如何实际获得你认为正在恢复的内容?您是否一次安装一个包。那太疯狂了。

我要观察到没有npm install的nuget等价物可以获取你需要的所有包......当我发现实际上有一个几乎相当的时候。这不是很明显,我想知道有多少人知道它存在。

这是一个两步过程:

  1. 首先恢复丢失的包......那么

  2. 发出命令:Update-Package -Reinstall

  3. 这将重新安装解决方案中每个项目的所有包。

    如果您只想为特定项目重新安装,请尝试:

    Update-Package -ProjectName 'YourProjectName' -Reinstall
    

    在这两个过程中,-Reinstall开关都努力安装package.config中拼写的软件包的确切版本...而不是更新的“更新”软件包,这些软件包可能适用于您的项目,也可能不适用于您的项目(但请参阅文档以了解例外情况。)

    在标题为“Reinstalling Packages and its Pitfalls”的官方nuget文档中阅读update-package -reinstall

    不要错过警示性言论。显然,这种技术仅仅是您对其他包管理器的期望。

    祝你好运,人民。