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”文件夹中。
失败是可重复的到位。
您将获得相同的失败行为......以及手动卸载和重新安装的相同功能。
FWIW,从.csproj中删除对 edmbuilder.cs 的引用无效。
无论我做什么,我都必须手动卸载并重新安装软件包。
WTF!
p.s:我正在使用VS 2013 Update 2 RC。我怀疑“RC”是否很重要,因为这个问题引起了我对客户的注意。你永远不会知道。
p.p.s:这不是关于构建失败的问题,我不关心这个解决方案永远不会运行。你在这里看到的是一个真正的应用程序的精简版本。唯一的问题是“为什么没有恢复文件?”
答案 0 :(得分:2)
程序包还原非与安装程序包相同。你所看到的是设计。它只是在 packages 文件夹中下载任何缺少的包。不再。不能少。
添加了包恢复,因此您无需将packages文件夹提交到源代码管理。
预计你会安装一个软件包,然后提交对项目文件所做的更改以及可能已添加的任何文件,如 edmbuilder.cs ,基本上是项目文件夹中的任何内容。您将排除packages文件夹。
现在,当您从源代码管理中获取源代码时,除了包文件之外,所有内容都将存在。包恢复将下载这些,现在您的工作副本已完成。
请参阅NuGet's Restore Package insists on specific package versions
答案 1 :(得分:1)
感谢@Kiliman解释我的可怕体验是“按设计”。
那么你如何实际获得你认为正在恢复的内容?您是否一次安装一个包。那太疯狂了。
我要观察到没有npm install
的nuget等价物可以获取你需要的所有包......当我发现实际上有一个几乎相当的时候。这不是很明显,我想知道有多少人知道它存在。
这是一个两步过程:
首先恢复丢失的包......那么
发出命令:Update-Package -Reinstall
这将重新安装解决方案中每个项目的所有包。
如果您只想为特定项目重新安装,请尝试:
Update-Package -ProjectName 'YourProjectName' -Reinstall
在这两个过程中,-Reinstall
开关都努力安装package.config中拼写的软件包的确切版本...而不是更新的“更新”软件包,这些软件包可能适用于您的项目,也可能不适用于您的项目(但请参阅文档以了解例外情况。)
在标题为“Reinstalling Packages and its Pitfalls”的官方nuget文档中阅读update-package -reinstall
。
不要错过警示性言论。显然,这种技术仅仅是您对其他包管理器的期望。
祝你好运,人民。