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

Posted

技术标签:

【中文标题】NuGet 有丢失包的问题,​​如何恢复?【英文标题】:NuGet has problems with missing packages, how to restore? 【发布时间】:2016-10-30 16:25:56 【问题描述】:

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

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 包吗?

【问题讨论】:

【参考方案1】:

在 Visual Studio 中使用 Package Manager Console 运行此命令。

1.这将来自解决方案的restore all packages

nuget restore YourSolution.sln

2.如果你想reinstall the packages到之前安装的版本

Update-Package -reinstall

【讨论】:

nuget restore TestEnvi.sln give me the error The term 'restore' is not recognized as the name of a cmdlet, function, script 有一个解决方法。在您的解决方案文件夹中应该有一个“包”目录。打开这个目录并删除所有目录,然后再次运行reinstall。 命令 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. 谢谢,第一次运行这个:Install-Package NuGet.CommandLine 然后上面对我有用 'Update-Package -reinstall' 帮助了我。非常感谢。【参考方案2】:

老实说,为 VS 开发 NuGet 命令的人需要回到绘图板上。他们完全忽略了有时这些 DLL 和/或文件被损坏或删除的事实。 “NuGet Get-Packages -Force”选项真的可以节省他们的培根。我看到的唯一 GAP 是 VS 和 Package 控制台不允许您从 NuGet 调用强制下载。即使通过 VS 清除缓存也没有用。

【讨论】:

太正确了。一种解决方法是从您的项目中卸载软件包,然后重新安装它们。糟透了。 现在是 2020 年,这仍然是破碎的 2022 年还在继续。【参考方案3】:

当我尝试在解决方案根目录中不存在 packages-folder 的计算机上构建项目时遇到了这个问题。

最初创建项目文件时,似乎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 恢复了包并再次正确构建了解决方案。

【讨论】:

谢谢,这为我解决了。不知道为什么将这个引用放在我的项目文件中。【参考方案4】:

通过删除此目录中的内容来清除 Nuget 缓存可能是个好主意:C:\Users\your_username\AppData\Local\NuGet

【讨论】:

我试过了,但并没有解决问题(即使在重新启动 VS 之后)【参考方案5】:

您只需要: 打开包管理器控制台并运行以下命令:Update-Package -reinstall

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

【讨论】:

【参考方案6】:

NuGet 包的功能问题也可能是由于 NuGet 包需要项目不满足的某些依赖项

NuGet 包可以在 Dependecies 部分声明依赖项,例如.NETFramework,Version=v.4.6.2,而项目针对的是旧版本(目标框架:.NET Framework 4.6.1.)。

NuGet 系统没有通知用户这一事实,项目根本无法编译。

【讨论】:

【参考方案7】:

就我而言,我有不同的 Nuget 配置,并且项目文件中的 HintPath 不知何故不适合。

也许您应该检查 HintPath 是否指向正确的 NuGetPackages 文件夹。

您还应该检查文件顶部的以下条目:

在文件的底部:

所有这些路径都应指向文件结构中正确的 NuGetPackage 文件夹。

【讨论】:

【参考方案8】:

在我的情况下,问题是通过删除“obj”文件夹然后重建解决方案来解决的。

“obj”文件夹中有几个与 NuGet 相关的文件,这些文件仍然引用包的 0.0.2 版本,而解决方案中的所有项目都已使用该包的 1.0.0 版本。构建解决方案失败,并显示错误消息“找不到版本 0.0.2 的包”。包含构建文件夹的解决方案是最近从另一台机器复制的。

【讨论】:

【参考方案9】:

嗯,这可能是一个不好的方法,但我发现如果我只是删除该行就可以了

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

来自 project.csproj ,不确定这是否会在以后引起问题,但现在可以使用。

【讨论】:

以上是关于NuGet 有丢失包的问题,​​如何恢复?的主要内容,如果未能解决你的问题,请参考以下文章

Nuget 包未恢复

TeamCity Build Server无法恢复nuget包

恢复 Nuget 引用?

如何本地调试nuget发布的dll

Eclipse启动时,项目文件丢失了,这种问题如何避免?

如何启用的NuGet包在Visual Studio 2015年恢复