【问题标题】:Problem with uninstalling NuGet Packages卸载 NuGet 包的问题
【发布时间】:2011-07-06 21:42:20
【问题描述】:

我正在尝试卸载一些由 NuGet 安装的包。根据here 描述的文档,当我选择已安装的包时,我应该会看到一个 Uninstall 按钮(下面的第一个屏幕截图)。但是,我只看到一个 Manage 按钮(下面的第二个屏幕截图)。谁能告诉我如何卸载软件包?

【问题讨论】:

    标签: nuget nuget-package


    【解决方案1】:

    如果您向下滚动到您链接到的 NuGet 文档页面的 Managing Installed Packages 部分,您将看到“管理”按钮和说明。

    NuGet 1.4 中引入了一项新功能,允许您在解决方案资源管理器中选择解决方案,并在一个步骤中从多个项目中添加/删除包。以前,您必须在解决方案资源管理器中选择每个项目,然后一次从每个项目中添加/删除包。

    如果单击“管理”按钮,将显示“选择项目”对话框,您可以在其中取消选中要从中卸载 NuGet 包的项目。

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

    【讨论】:

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

    最后,我发现我必须手动编辑 .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 文件夹。

    【讨论】:

    • 在我的例子中,解决方案文件中没有引用,但是从打包目录中删除包文件夹就可以了。
    • +1 就我而言,我的解决方案文件中有引用,但删除包目录中的包文件夹就足够了。
    • 您可以使用包管理器控制台来执行此操作,正如我在回答中所解释的那样。而且你不能绝对确定你正在做你需要做的所有事情。在这方面使用包管理器控制台更安全。
    【解决方案3】:

    有时存在不允许卸载软件包的依赖关系,但无论如何您都需要这样做(即,如果您无意中安装了具有依赖关系的软件包的两个不同版本)。

    发生这种情况时,卸载包的唯一方法是强制卸载,这只能通过包管理器控制台来完成。

    在进入控制台之前,您应该打开“管理 NuGet 包”窗口,并记下您的包的 Id 和版本,当您单击包时,它会显示在右侧窗格中。

    然后你可以关闭管理窗口,打开控制台(Package Manager Console),运行这个命令:

    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 文件,所以我不知道不匹配是如何发生的。可能因为最初包含包而没有更新配置文件,所以引用发生了变化...?

      【讨论】:

        【解决方案5】:

        我在删除具有依赖关系的 Code first lib CTP5 时遇到问题,卸载没有返回任何消息,也没有删除任何内容。从您需要删除的 packages.config 中删除引用。之后它将不再显示在 nuget 中,您可以重新安装或继续。

        【讨论】:

          【解决方案6】:

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

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

          正如其他人所说,删除包文件夹是解决方案。但后来我不得不手动找出该文件夹之外的其他文件也应该删除。

          【讨论】:

            猜你喜欢
            • 2012-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-17
            • 2018-04-02
            • 1970-01-01
            • 2013-09-08
            • 1970-01-01
            相关资源
            最近更新 更多