NuGet有缺失包的问题,如何恢复?

35

当我尝试编译我的程序时,出现以下错误:

This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.    
现在当我右键点击解决方案并按下

键时
All packages are already installed and there is nothing to restore.

我尝试手动重新安装每个软件包,但这并没有解决问题。我尝试重新安装NuGet,但也没有帮助,甚至尝试重新安装Visual Studio。

我还尝试将软件包文件夹从TFS文件夹移动到覆盖我的软件包文件夹,但这并没有解决任何问题。我还尝试使用缺失此软件包的方法重新下载它们,但也没有解决问题。

有人知道如何恢复NuGet软件包吗?

9个回答

31

使用Visual Studio中的程序包管理器控制台运行此命令。

1.这将从解决方案中还原所有包

nuget restore YourSolution.sln

2. 如果您想要重新安装与以前安装的相同版本的软件包,请重新安装这些软件包

Update-Package -reinstall

2
有一个解决方法。在您的解决方案文件夹中应该有一个“packages”目录。打开此目录,删除所有目录,然后再次运行重新安装。 - Rahul Nikate
5
在包管理器控制台窗口中,对于我来说使用命令 nuget restore mysolution.sln 无效,我收到了此错误消息:"PM> nuget restore reco.sln nuget : The term 'nuget' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."。 - Dai
这部分有效,但我还必须手动添加引用,这是所有步骤的混合。 - Legends
2
谢谢,首先运行以下命令: Install-Package NuGet.CommandLine 然后上述操作对我有帮助。 - Nick G.
2
"Update-Package -reinstall" 帮了我很大的忙。非常感谢。 - Pankaj Kaushik
显示剩余13条评论

26

老实说,谁开发了VS的NuGet命令都需要重新思考一下。他们完全忽略了这些DLL(s)和/或文件有时会损坏或被删除的事实。一个"NuGet Get-Packages -Force"选项会真正挽救他们的局面。我唯一看到的缺陷是VS和Package控制台不允许你从NuGet中调用强制下载。即使通过VS清除缓存也没用。


1
太对了。解决这个问题的一个方法是卸载项目中的软件包,然后重新安装它们。很烦人。 - Mardoxx
14
这是2020年,这仍然存在问题。 - Rich
7
2022 年以及之后。 - Manuzor
3
2023 年,还在继续。 - ojonasplima

12

在尝试在一个计算机上构建项目时,我遇到了这个问题,该计算机的解决方案根目录中不存在packages文件夹。

当项目文件最初创建时,似乎VS2019向项目文件中添加了以下内容:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>

据我所知,这些设置现在已经过时了,不知道为什么VS一开始要插入它。

无论如何,在删除这些行之后,VS能够再次正确地恢复包并构建解决方案。


谢谢,这个解决了我的问题。我不知道为什么这个引用被放在我的项目文件中。 - Patrick Tucci

2

清空Nuget缓存是一个不错的主意,可以通过删除此目录中的内容来实现:C:\Users\{your_username}\AppData\Local\NuGet


我尝试过了,但它并没有解决问题(即使重新启动了VS)。 - Thijser
在我的情况下,我必须清除此目录和 C:\Users\{your_username}\.nuget\packages 才能解决这个问题。 - somethingRandom

1
你只需要这样做: 打开程序包管理器控制台并运行以下命令:Update-Package -reinstall

P.S: VS2017及以上版本的NuGet包管理器已经包含在Visual Studio中,无需安装任何其他软件。


1

NuGet包的功能问题也可能是因为 NuGet要求项目不符合的某些依赖项

Dependencies部分,NuGet包可以声明依赖关系,例如.NETFramework,Version=v.4.6.2,而该项目的目标版本为较旧的版本(目标框架:.NET Framework 4.6.1)。

而不是让NuGet系统通知用户此事实,该项目只是无法编译。


1
在我的情况下,问题是通过删除“obj”文件夹,然后重新构建解决方案来解决的。
“obj”文件夹中有几个NuGet相关文件,仍然引用了一个包的版本0.0.2,而所有项目都已经使用该包的版本1.0.0。构建解决方案时出现错误消息“找不到版本为0.0.2的包”。包含构建文件夹的解决方案最近从另一台机器复制。

1
在我的情况下,我有不同的Nuget配置,但是项目文件中的HintPath并不适合。

enter image description here

也许你应该检查一下 HintPath 是否指向正确的 NuGetPackages 文件夹。
你还应该检查文件顶部的以下条目: enter image description here 以及文件底部的: enter image description here 所有这些路径都应该指向你文件结构中正确的 NuGetPackage 文件夹。

0

这可能不是一个好的方法,但我发现如果我只删除项目.csproj中的行

http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />

它可以工作,但我不确定以后是否会出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接