PowerShell PackageManagement,如何卸载包提供程序?

PowerShell PackageManagement, how to uninstall a package provider?

要解决问题,我想我会尝试重新安装 Chocolatey 包提供程序。似乎没有用于删除或卸载包提供程序的 cmdlet。我不是指删除包源或包。我在 Windows 10.

上使用 PowerShell 5

有没有办法卸载软件包提供程序?

如果我明白你想要什么:

Uninstall-Package[-Id][-RemoveDependencies][-ProjectName][-Force][-Version][-WhatIf]

使用 -Force 选项强制卸载软件包。

包提供程序与 WMF 安装捆绑在一起。

如果您知道搜索位置(甚至是您自己的自定义包提供商),您可以轻松添加(和删除)包提供商。

查找您的包提供程序的安装位置:

$p = (Get-packageProvider -name Chocolatey);
$p.ProviderPath

如果您将程序集删除/移动到提供商默认搜索路径之外的某个地方;它将不可用(注意:重新启动主机也会看到效果)。

同样,您可以通过将实现包提供程序规范的 exe/dll 复制到搜索位置来添加包提供程序。

可以在此处找到更多文档(实现您自己的搜索位置和默认搜索位置):

https://github.com/OneGet/oneget/wiki/Provider-assembly-search-locations https://github.com/OneGet/oneget/wiki/ImplementingPackageProvider

如何删除 NuGet 提供程序的简单示例

(Get-PackageProvider|where-object{$_.name -eq "nuget"}).ProviderPath|Remove-Item -force
Restart-Computer

为了补充 , given that the PackageManagement module 从版本 1.4.7 开始仍然有 no Uninstall-PackageProvider 命令(请参阅带有 [=12 的模块附带的所有命令=]):

注意:为了以后能够撤消此更改,请记下 (Get-PackageProvider NuGet).ProviderPath 报告的路径并制作该文件的备份副本。

Step-by-step 说明 用于删除 NuGet 包提供程序,例如:

  • Windows:

    • 将NuGet package-provider程序集(DLL)的路径复制到剪贴板:

      • (Get-PackageProvider NuGet).ProviderPath | Set-Clipboard
    • 启动提升的 PowerShell 会话(运行 作为管理员 - 需要管理员凭据)。要从现有 (non-elevated) 会话执行此操作,运行:

      • Start-Process -Verb RunAs (Get-Process -Id $PID).Path
    • 在继续之前,关闭所有其他 PowerShell 会话,其中可能包括需要退出 Visual Studio 代码。

      • 只有在当前没有加载会话的情况下,删除 DLL 才会成功;如果不能确保这一点,您将收到 Access denied 错误,即使有提升也是如此。
    • elevated session(你不能在其中提交任何 PackageManagement 命令)中,提交以下命令删除 NuGet package-provider程序集(DLL):

      • Remove-Item -Force <paste-the-previously-copied-path-here>
  • macOS 和 Linux 上:

    • sudo 启动 PowerShell 会话。要从现有 (non-elevated) 会话执行此操作,运行:

      • sudo pwsh
    • 提交以下命令删除 NuGet package-provider 程序集 (DLL):

      • (Get-PackageProvider NuGet).ProviderPath | Remove-Item -Force
  • 剩余步骤适用于所有平台:

    • 退出提升的/sudo会话。

    • 启动 new (non-elevated) 会话以使更改生效:Get-PackageProvider 应该不再列出 NuGet 提供商。