为了解决问题,我想我应该尝试重新安装Chocolatey软件包提供程序。似乎没有cmlet来删除或卸载包提供程序。我指的不是删除包源或包。我在Windows 10上使用PowerShell 5。
是否有卸载包提供程序的方法?
包提供程序与WMF安装捆绑在一起。
如果你知道搜索位置(甚至你自己的自定义包提供程序),你可以很容易地添加(和删除)包提供程序。
查找软件包提供程序的安装位置:
$p = (Get-packageProvider -name Chocolatey);
$p.ProviderPath
如果你删除/移动程序集到提供程序默认搜索路径之外的某个地方;它将不可用(注意:重新启动您的主机,看看效果)。
同样,您可以通过复制实现packageprovider规范的exe/dll到搜索位置来添加包提供程序。
更多文档可以在这里找到(实现您自己的和默认的搜索位置):
https://github.com/OneGet/oneget/wiki/Provider-assembly-search-locationshttps://github.com/OneGet/oneget/wiki/ImplementingPackageProvider
如何删除NuGet提供程序的简单示例
(Get-PackageProvider|where-object{$_.name -eq "nuget"}).ProviderPath|Remove-Item -force
Restart-Computer
补充Harald F的有用答案,考虑到版本1.4.7的PackageManagement
模块仍然有没有 Uninstall-PackageProvider
命令(参见Get-Command -Module PackageManagement
模块附带的所有命令):
注意:为了能够在以后撤销此更改,请记下(Get-PackageProvider NuGet).ProviderPath
报告的路径并对该文件进行备份。
删除NuGet
包提供程序的分步说明,例如:
-
Windows :
-
将NuGet包提供程序集(DLL)的路径复制到剪贴板:
-
(Get-PackageProvider NuGet).ProviderPath | Set-Clipboard
-
-
启动提升的PowerShell会话(以admin身份运行-需要管理员凭据)。要从现有(非提升)会话执行此操作,请运行:
-
Start-Process -Verb RunAs (Get-Process -Id $PID).Path
-
-
在继续之前,关闭所有其他PowerShell会话,这可能包括需要退出Visual Studio Code。
- 如果当前没有会话加载DLL,则删除DLL将成功;如果没有保证,你会得到一个
Access denied
错误,即使有海拔。
- 如果当前没有会话加载DLL,则删除DLL将成功;如果没有保证,你会得到一个
-
在提升的会话中(在此会话中您必须没有提交任何
PackageManagement
命令),提交以下命令以删除NuGet包提供程序集(DLL):-
Remove-Item -Force <paste-the-previously-copied-path-here>
-
-
-
在macOS和Linux上:
-
使用
sudo
启动PowerShell会话。要从现有(非提升)会话执行此操作,请运行:-
sudo pwsh
-
-
提交以下命令删除NuGet包提供程序集(DLL):
-
(Get-PackageProvider NuGet).ProviderPath | Remove-Item -Force
-
-
-
其余步骤适用于所有平台:
-
退出升高的/
sudo
会话。 -
启动新的(非提升)会话以使更改生效:
Get-PackageProvider
应该不再列出NuGet
提供者。
-
如果我明白你想要什么:
Uninstall-Package [-Id] [-RemoveDependencies] [-ProjectName][-Force] [-Version] [-WhatIf]
使用-Force选项强制卸载一个包。