NuGet包还原不起作用

Eri*_* J. 157 nuget

我在一台计算机上检查了一个项目,检查了另一台计算机,发现NuGet安装的二进制文件丢失了.我也可以检查它们来源控制,但看起来有一个更好的解决方案:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

我按照这些说明,现在有.nuget一个应该是的文件夹,在我的.csproj文件中有以下条目:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
Run Code Online (Sandbox Code Playgroud)

然而,当我重建我的解决方案时,丢失的包不会被恢复.

我错过了什么?我该如何诊断这个问题?

Chr*_*sic 258

请注意,您可以通过在nuget包管理器控制台中运行以下命令来强制执行包还原

更新包 - 重新安装

强制重新安装解决方案中的所有内容.


Update-Package -Reinstall -ProjectName myProj

强制重新安装myProj项目中的所有内容.

注意:这是核选项.使用此命令时,您可能无法获得已安装的软件包的相同版本,这可能会导致问题.与解决方案级别相比,这不太可能发生在项目级别.

您可以使用-safe命令行参数选项将升级限制为具有相同主要和次要版本组件的较新版本.此选项稍后添加,并解决了评论中提到的一些问题.

Update-Package -Reinstall -Safe

  • @ NightOwl888听起来像需要报告给nuget的东西,因为它应该没有办法可以做到这一点,除非你真的总是有DLL地狱绑定问题,并且幸运的是它正在工作,但重新安装它结束了你运气的运气. (7认同)
  • @nightowl如果你正在使用源代码控制,那么应该不会很难支持更改. (4认同)
  • 这里的主要缺点是不维护包版本,因此将安装最新的包版本.如果您的项目与新版本不兼容,这可能是一个问题. (4认同)
  • 是的,Update-Package -Reinstall对我有用.我不知道为什么IDE不这样做.一切都设置正确.我发誓,NuGet既好又烦. (4认同)
  • 很高兴您在答案的底部添加“重要!这可能会破坏您的项目”! (2认同)

Dav*_*New 24

对于偶然发现这篇文章的其他人,请阅读本文.

NuGet 2.7+向我们介绍了自动包恢复.对于大多数应用程序来说,这被认为是一种更好的方法,因为它不会篡改MSBuild进程.少说头疼.

一些链接可以帮助您入门:

  • 感谢您提供适合当前NuGet版本的答案. (2认同)

Ale*_*ion 20

您是否在具有缺少的软件包/二进制文件的项目中启用了软件包还原模式?有一个已知问题,需要在启用还原模式时正确安装软件包:

http://nuget.codeplex.com/workitem/1879


原始链接已经死亡; 这可能是一个替代品:https://github.com/NuGet/Home/issues/1968

  • NuGet每天都让我失望,我完全鄙视它. (85认同)
  • 谢谢你的链接.在具有缺少的包/二进制文件的项目中启用包还原模式将是常见情况.如果你没有包裹,那就是你想要的时候.用例失败. (3认同)
  • 当你说"在包含缺失包的项目中启用包恢复模式"时,你的意思是什么?是否有我需要运行的控制台命令来执行此操作? (2认同)

Moh*_*yan 19

您必须选择以下一种方式:

在所有解决方案的项目中按名称重新安装软件包:

Update-Package –reinstall <packageName>
Run Code Online (Sandbox Code Playgroud)

按名称重新安装软件包,忽略它在所有解决方案项目中的依赖关系:

Update-Package –reinstall <packageName> -ignoreDependencies
Run Code Online (Sandbox Code Playgroud)

在项目中按名称重新安装包:

Update-Package –reinstall <packageName> <projectName>
Run Code Online (Sandbox Code Playgroud)

重新安装特定项目中的所有包:

Update-Package -reinstall -ProjectName <projectName>
Run Code Online (Sandbox Code Playgroud)

在解决方案中重新安装所有软件包:

Update-Package -reinstall 
Run Code Online (Sandbox Code Playgroud)


小智 12

我在两个场景中遇到了这个问题.

首先,当我尝试使用msbuild.exe从命令行构建我的解决方案时.其次,当我尝试使用TFS和CI在我的构建服务器上构建sln和包含项目时.

我得到错误声称缺少引用.检查我的本地构建目录和TFS服务器时,我发现未创建/ packages文件夹,并且不会复制nuget软件包.遵循Alexandre的答案http://nuget.codeplex.com/workitem/1879中列出的说明也不适用于我.

我已经通过VS2010启用了Restore Packages,我看到构建只能在VS2010中运行.再次,使用msbuild失败.我的解决方法可能完全无效,但对于我的环境,这使得一切工作从本地命令行构建,以及TFS中的CI构建.

我进入.\nuget并在.nuget\NuGet.targets文件中更改了这一行:

从:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>
Run Code Online (Sandbox Code Playgroud)

to :(注意,没有变量周围的引号)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>
Run Code Online (Sandbox Code Playgroud)

我明白,如果我的目录中有空格,这将失败,但我的目录中没有空格,所以这个解决方法让我的构建成功完成...暂时.

我会说在构建中启用诊断级别日志记录将有助于显示msbuild正在执行的命令.这就是我暂时黑客攻击目标文件的原因.


小智 12

VS 2017

工具> NuGet包管理器>包管理器设置>常规单击"清除所有NuGet缓存"


Loa*_*ron 5

如果其他方法无效,请尝试:

  1. 关闭项目。
  2. 在您的解决方案文件夹中删除程序包文件夹。
  3. 再次打开项目,然后再次还原Nugget软件包。

为我工作,很容易尝试。

  • 这对我有用。在第3步中,我不必手动还原软件包-当我打开项目时,它们会自动还原。 (2认同)

Jak*_*son 5

If none of the other answers work for you then try the following which was the only thing that worked for me:

Find your .csproj file and edit it in a text editor.

Find the <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> tag in your .csproj file and delete the whole block.

Re-install all packages in the solution:

Update-Package -reinstall
Run Code Online (Sandbox Code Playgroud)

After this your nuget packages should be restored, i think this might be a fringe case that only occurs when you move your project to a different location.