Nuget包已经存在但引用丢失。

80

在TFS分支后,VS2015更新2版本缺少所有Nuget包的引用。软件包还原显示“packages.config中列出的所有软件包都已安装。”

我可以手动添加\packages文件夹中所有软件包的引用,但为什么VS没有检查这里呢?


9个回答

135

您需要在“程序包管理器控制台”中使用NuGet命令行:

Update-Package -reinstall

要强制重新安装软件包引用到项目中。

NuGet Restore仅还原包目录中的文件(\packages folder),但不会还原您项目中的文件或以其他方式修改您的项目。 例如,如果某个软件包在您的项目中添加了某些引用DLL或其他文件,如果您删除了这些文件,则在还原此软件包时它们不会被重新添加。这可能导致在构建时无法找到缺少的依赖项。

因此,请使用"Update-Package -reinstall"命令来强制重新安装软件包引用和内容文件到项目中。


1
这会安装每个包的最新版本,还是原始安装的版本(无论它是否损坏)? - mrtumnus
1
@mrtumnus,最初安装的版本。 - Leo Liu
10
没有项目协议时,运行Update-Package <package_name> -ProjectName MyProject -reinstall命令会出错。这个命令是针对特定项目的,需要谨慎操作。请注意,我的翻译内容并不改变原意,而是使其更加易于理解和流畅,并且不会返回任何额外的信息。 - Trevor F
这个命令的问题(在VS 2017 v15.8.3中)是它修改了我所有的.csproj文件(添加特定版本到引用等),在我从未有过的地方创建了package.config文件,以及许多其他东西,而不仅仅是“获取引用”。我想做的就是让R#“看到”nuget dlls,这样智能感知和引用就可以正确解析。有更好的方法吗?我最终运行了上述命令,然后还原了所有更改。现在,R#可以在没有任何.sln/.csproj更改的情况下解析所有内容。顺便说一句,R#版本是2018.1.4 Ultimate。 - jessewolfe
1
项目重建是解决我的问题的方法。我的意图只是恢复包,而不是安装或重新安装。另一个开发人员将包安装到项目中并提交了更改。当我获取最新版本时,我得到了更新的packages.config文件。因此,我所需要做的就是恢复这些包(按照packages.config文件的指示)。因此,在我进行还原之前,VS正确地报告了缺失的引用。然而,即使在还原后,VS仍然继续报告缺失的引用。但是,当我构建项目时,它能够成功构建,并且关于引用的警告消失了。 - Social Developer
显示剩余6条评论

9

以下方法适用于我:

  • 从解决方案中卸载项目。
  • 编辑csproj文件并从csproj文件(ItemGroup)中删除Nugget条目。
  • 重新加载项目。

1
谢谢,这也解决了我的问题,但我还是做了一个“Update-Package -reinstall”,以防万一。 - MrCADman
非常感谢。在还原到csproj文件的最后一步之后,只需删除NuGet条目,所有缺失的引用都正确加载了。 - Mateusz Stępniak
对我来说,这种情况发生在我将一个现有项目移动到一个嵌套目录时。因此,所有的NuGet包都被搞乱了,甚至.NET DLL也无法正确加载。对我来说,解决方案是相同的。请注意,与NuGet包相关的信息可能存在于三个位置,您需要删除它们。它们的x-path如下 - 1.Project\Import 2.Project\ItemGroup\Reference 3.Project\Target\Error - RBT
这就是我所能做的了 - Denis Schaf

8

8
如果你从Git存储库克隆了该项目,并且克隆时创建的文件夹中有"%20",那么请重命名文件夹并去掉"%20"。这样可以帮助在项目中找到包dll文件。

尝试了所有之前的答案,可耻的是这就是原因。百分号编码字符应该完全替换,参考:https://www.w3schools.com/tags/ref_urlencode.asp - CPHPython
简单。对我有效 :) - Dipo

5

前往 ->

  1. 工具 -> Nuget 包管理器 -> 包管理器设置
  2. Nuget 包管理器下的常规选项卡
  3. 进行缓存清除
  4. 重启 Visual Studio 并还原所有 Nuget 包。
  5. 这将刷新所有引用。

1
我最近不得不向一个包含多个来自多个来源的NugGet包的大型解决方案添加一个项目。 我的解决方案是在软件包管理器控制台中运行Update-Package -reinstall。完成后,所有现有项目都将得到更新。 如果您正在使用GIT,请进入Team Explorer并撤消更新的其他项目的所有更改,但保留新项目的更改。 您的引用将在那里,您的“using”语句将没有那些烦人的红色波浪线:)

1

我使用的一个解决方案是:

  1. 转到工具 > NuGet 包管理器 > 包管理器设置。
  2. 在左侧窗格中,单击 Nuget 包管理器下的“包源”。
  3. 然后确保您拥有以下设置:

enter image description here

然后重新启动VS并恢复包。

0
  1. 右键单击项目,选择卸载项目。
  2. 右键单击项目,选择编辑 csproj 文件。
  3. 从 csproj 文件中删除以下标签名称并保存: <target name="EnsureNugetPackageBuildImports" ...... > ..............
  4. 右键单击项目并重新加载项目。

0

我在安装一个包时遇到问题后清除了我的nuget缓存,结果出现了这个问题... 我的所有包都在那里,但是引用错误无处不在。我也无法卸载/重新安装包,nuget控制台命令也不起作用,例如Update-Package -Reinstall -ProjectName Your.Project.Name。手动尝试从csproj文件中删除它们以及通过在ide的解决方案菜单树上直接浏览包.dll并手动添加它们也不行。

幸运的是,当天早上我备份了整个项目文件夹,保存为.zip格式。我被迫将我的VS 2019版本更新到最新版本(此时为16.10.1版本),然后恢复到我的备份,问题得到了解决。

我再也不会清除nuget缓存了。


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