如何删除解决方案中任何项目未引用的NuGet软件包?


141

在以某种方式升级到VS2012和.NET 4.5的过程中,我设法使NuGet感到困惑。我无法删除出现在程序包管理器(和程序包文件夹)中的程序包(我相信它们是旧版ASP.NET NuGet程序包,已用新版本的新程序包名称替换。每个程序包只有一个“ 管理” 按钮-但没有卸载按钮。当您查看它们的使用位置时,可以看到解决方案的任何项目都未引用它们,它们没有显示“卸载”?

Answers:


108

您可以将Package Manager Console与以下命令配合使用:Uninstall-Package PackageId将其删除,或仅从解决方案文件夹下的“ packages”文件夹中删除package文件夹。有关Package Manager控制台的更多信息,请参见:http : //docs.nuget.org/docs/reference/package-manager-console-powershell-reference


8
谢谢帕维尔。我觉得您可以删除文件夹。这有点令人不安,因为我必须手动确保没有引用任何软件包(它们似乎没有被引用)。我还是很想知道为什么程序包管理器没有显示“卸载(或删除)”按钮。
霍华德·平斯利

2
解决方案级别的程序包管理器显示解决方案中对项目的所有程序包引用以及放置在程序包文件夹中但未引用的所有其他程序包。对于此软件包,UI中没有卸载功能。我同意这是错误行为的结果,但是在这种情况下,您应该手动检查它。并确定确实需要时,请删除软件包或重新安装。
Pavel Bakshy 2012年

1
通过仅删除文件夹并返回NuGet并查看软件包,它会以某种方式显示为已安装,旁边带有绿色的勾号,最好使用控制台进行正确的卸载。
k80sg 2013年

1
@ysrb,它是一个强大的shell命令,可以使用动词-名词(例如get-user或remove-item),您的示例是名词-动词
Nick Young

1
@ysrb正如尼克·杨(Nick Young)所说的那样,此外,这将是对他的极大赞美Install-Package
ProfK '17

159

我已经找到了解决方法。

  1. 启用软件包还原和自动检查(选项/软件包管理器/常规)
  2. 删除packages文件夹的全部内容(如果您不满意,请回收站!)
  3. 管理解决方案的Nuget软件包
  4. 单击还原按钮。

NuGet将还原您的解决方案中使用的软件包。您最终得到了一套不错的,精简的软件包。


1
不是不会从项目中删除软件包,packages.config不会从项目中删除引用吗?
CodeCaster

1
@CodeCaster很难解析您的双重否定。什么都不会从配置和引用中删除。这里的想法是删除不再引用的NuGet软件包
James L

1
很好的答案!如果您使用的是TFS,则应首先在源countrol Explorer中删除./packages中的所有内容,以便其他客户端(如构建计算机)也将删除多余的项。
亚历山大·施密特

4
@ sprinter252,如果您使用的是包还原,则不应首先将包检入源代码管理。这是使用程序包还原的主要好处之一。在转换为软件包还原的过程中,应在软件包文件夹中放置“忽略”规则。
卡尔·布塞玛

@CarlBussema你是对的。由于新的NuGet版本不那么重要,因为Nuget不会将任何二进制文件添加到子文件夹中。因此,您仅获得文件夹结构。我的评论与TFS的默认行为有关(包括packages-folder)。在TFS上,忽略通常被;;)忽略。对于Xamarin的混合项目很重要。
亚历山大·施密特

17

首先打开Package Manager控制台。然后从下拉列表中选择您的项目。并运行以下命令来卸载nuget软件包。

Get-Package

获取所有已安装的软件包。

然后

Uninstall-Package PagedList.Mvc

-卸载名为PagedList.MVC的软件包

信息

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.

这个答案对我来说非常有效。我的情况是该程序包仅显示在对话框的“更新”选项卡下...,当我单击“更新”时,没有安装该程序包的项目-因此无法更新或删除它。
azarc3 2015年

8

如果要删除/卸载应用于解决方案中多个项目的 Nuget软件包,请转到:

  1. 工具-> Nuget软件包管理器->管理解决方案的Nuget软件包

  2. 在“已安装软件包”的左列中,选择“全部”,这样您将看到已安装软件包的列表以及它们之间的“管理”按钮。

  3. 选择管理按钮,您将弹出一个对话框,取消选中项目名称中的复选框,然后单击确定。

软件包管理器的其余工作将为您完成。


1
这绝对是我一直在寻找的答案,谢谢!
萨尔(Sal)

3

如果您已使用Uninstall-Package实用程序删除了软件包,并从解决方案下的软件包目录中删除了所需的软件包(并且仍然出现错误),则只需在代码编辑器中打开* .csproj文件并手动删除标签即可。例如,我想摆脱Nuget包Xamarin.Forms.Alias,并从* .csproj文件中删除了这些行。

从msbuild脚本中删除nuget包

最后,不要忘记在Visual Studio中提示后重新加载项目(更改项目文件后)。我在Visual Studio 2015上尝试过,但它也应在Visual Studio 2010及更高版本上运行。

希望这可以帮助。


2

一种替代方法是在解决方案的任何项目中安装要删除的未使用的软件包,然后将其卸载,Nuget也将其删除。

这里需要适当的卸载程序。


有没有一种方法可以让它正确卸载而无需重新安装?
诺克斯

2

解决方案1

使用powershell管道获取软件包并在单个语句中将其删除,如下所示

Get-Package | Uninstall-Package

解决方案2

如果要卸载选定的软件包,请按照以下步骤操作

  1. 使用GetPackages得到的软件包列表
  2. 下载Nimble文字软件
  3. 复制GetPackagesNimbleText中的输出(对于列表窗口中的每一行)
  4. (如果需要,将列分隔符设置为
  5. 类型Uninstall-Package $0(使用图案窗口替代)
  6. 复制结果并将其粘贴到Package Manage Console中

那是所有人。


1

一个NuGet包可以引用另一个NuGet包。因此,请注意包间的依赖性。我刚刚卸载了Google Map软件包,随后又卸载了Newtonsoft,Entity Framework等基础软件包。

因此,从“包”文件夹中手动删除特定的包会更安全。


1

在“程序包管理器”控制台窗口中,通常可以使用您用来安装程序包的任何命令来卸载该程序包。只需将INSTALL命令替换为UNINSTALL即可

例如,要安装PowerTCPTelnet,命令是:

Install-Package PowerTCPTelnet -Version 4.4.9

要卸载它,命令是:

Uninstall-Package PowerTCPTelnet -Version 4.4.9


1

VS2019>工具>选项> Nuget软件包管理器>常规>单击“清除所有Nuger缓存”


-2

换一种方式,对我来说最简单的是:

  1. 转到您的Soution,然后右键单击它。

  2. 选择选项“用于解决方案的托管NUgets软件包”。打开一个弹出窗口,在该窗口中单击“设置”按钮。这将打开其他弹出窗口,然后搜索:“ Package Manager”。

  3. 在选项“包管理器”中,您还有两个选项(I.常规II。包源),在每个选项中,取消选中所有复选框。

此步骤从您的项目中停用NuGet。

希望对您有帮助。


-2

如果要使用Visual Studio选项,请参见下面的链接

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

步骤1:在Visual Studio中,转到“工具/ NuGet程序包管理器/管理解决方案的NuGet程序包”。

步骤2:从当前解决方案中取消选中您的项目

步骤3:取消选择项目,然后按OK(确定)


2
最好在StackOverflow中写出答案,而不是仅仅发布一个链接,因为链接将来可能会过期。
AmadeusSánchez16年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.