卸载NuGet包时出现问题

15

我正在尝试卸载通过NuGet安装的一些软件包。根据此处描述的文档,当我选择已安装的软件包时,应该看到一个卸载按钮(如下面第一张截图所示)。然而,我只看到一个管理按钮(如下面第二张截图所示)。请问有谁能告诉我如何卸载这些软件包吗?

NuGet Doc Screenshot

My Screenshot

6个回答

13

最后,我发现我必须手动编辑 .sln 解决方案文件并删除这些行:

GlobalSection(ExtensibilityGlobals) = postSolution
        EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35
EndGlobalSection

在解决方案文件中删除上述行后,这些包在NuGet Packages窗口的“已安装包”页面中消失了。现在只剩下一个包,并且我现在可以看到“卸载”按钮。

输入图像描述

编辑: 我还必须删除解决方案目录中的packages文件夹。


1
在我的情况下,解决方案文件中没有引用,但是从打包目录中删除软件包文件夹就解决了问题。 - Michael Teper
1
在我的情况下,我的解决方案文件中有参考,但删除包目录中的包文件夹就足够了。+1 - fiberOptics
你可以使用包管理器控制台来完成这个操作,我在我的回答中有解释。但你不能百分之百确定你已经做了所有需要做的事情。使用包管理器控制台在这方面更加安全。 - JotaBe

13
如果你向下滚动到你提供的NuGet文档页面的管理已安装的软件包部分,你会看到管理按钮和解释。
NuGet 1.4中引入了一个新功能,允许你在解决方案资源管理器中选择解决方案并一次性添加/删除多个项目的软件包。先前,你必须在解决方案资源管理器中选择每个项目,并逐个添加/删除软件包。
如果你单击管理按钮,将显示一个选择项目对话框,在其中你可以取消选中你想要从中卸载NuGet软件包的项目。

enter image description here

如果你在解决方案资源管理器中选择项目而不是解决方案,你可以从所选的项目中添加/删除软件包。在这种情况下,你只会看到安装和卸载按钮。


2
但它并没有从我的解决方案中删除这些软件包。这些软件包仍然显示在“已安装软件包”页面下,旁边有“管理”按钮。此外,在我的解决方案目录中还有一个“packages”文件夹。您知道如何从“已安装软件包”页面中删除这些软件包吗?谢谢。 - StarCub
1
只有在没有安装在任何项目中时,才会从解决方案中删除软件包。因此,如果您不取消选中所有内容,则仍将安装在解决方案中。如果您在解决方案级别对话框中查看详细信息窗格,可以看到哪个项目具有哪个软件包。 - davidfowl

8
有时候,由于依赖关系,禁止卸载某个程序包,但你仍然需要卸载它(例如,当不小心安装了两个不同版本的带有依赖关系的程序包时)。
这种情况下,唯一的卸载方法是强制卸载,而且只能通过“程序包管理器控制台”来完成。
在打开控制台之前,你应该打开“管理 NuGet 程序包”窗口,并记下包的 Id 和版本号,这些信息显示在右边的窗格中,单击包即可看到。
然后关闭管理窗口,打开控制台(程序包管理器控制台),并运行以下命令:
uninstall-package -Id YourPackageId -Force -Version YourPackageVersion

注意-Force参数。例如:

uninstall-package -Id Unity -Force -Version 3.0.1304.0

这个命令可以卸载与版本2并行安装的版本3,这是无法通过“管理”窗口完成的。

4
我最近也遇到了类似的问题。我的项目可以正常运行,但我无法通过NuGet包管理器添加或删除任何包,因为源中显示缺少EnterpriseLibrary 5.0.505。但尝试恢复或删除它都会出现错误,“无法找到包'EnterpriseLibrary'的版本'5.0.505.'”。
我追踪到这是由于在packages.config文件中有以下引用造成的:
<package id="EnterpriseLibrary" version="5.0.505" targetFramework="net4" />

与我最近添加的其他解决方案进行比较,我更改了以下内容以解决该问题:
<package id="EnterpriseLibrary.Common" version="5.0.505.0" targetFramework="net4" />

我从未手动编辑过任何package.config文件,所以我不知道为什么会出现不匹配的情况。可能是由于在未更新配置文件的情况下包含了该包,导致引用发生了变化...


0

我遇到了一个问题,想要移除Code first lib CTP5,但它有一些依赖项。卸载时没有返回任何消息,也没有删除任何东西。你需要从packages.config文件中删除你想要移除的引用。这样它就不会在nuget中显示了,然后你就可以重新安装或者继续操作。


0

在使用VS IDE管理NuGet包对话框或包管理器控制台后,您可能需要手动删除解决方案文件或其他文件,这些文件是包的一部分,而不在packages文件夹中。

我正在评估Microsoft.AspNet.FriendlyUrls包,该包向我的ASP.NET Web应用程序项目/解决方案添加了一个主页面、一个用户控件、一个类代码文件和一个packages.config文件。在使用NuGet Packages对话框删除包之前,我错误地手动撤消/删除了这些文件。在那时,一切都变得混乱了。

正如其他人所说,删除packages文件夹是解决方案。但是,然后我必须手动找出该文件夹外的其他文件,这些文件也应该被删除。


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