如何从Visual Studio中的解决方案中卸载* all * nuget软件包


Answers:


132

要从解决方案中的所有项目中获取所有软件包,请使用Get-Package。要从特定项目中获取所有软件包,请使用Get-Package -ProjectName "YourProjectName"


从解决方案中的所有项目中删除所有软件包

注意:这将卸载解决方案中的所有软件包。如果使用参数,则即使存在依赖关系,也将删除软件包。-Force

Get-Package | Uninstall-Package -RemoveDependencies -Force


从解决方案中的特定项目中删除所有软件包

请注意:这将卸载项目中的所有软件包。如果使用参数,则即使存在依赖关系,也将删除软件包。-Force

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force

27
我建议在末尾添加-Force参数。没有它,我将无法基于与其他NuGet软件包的依赖关系来卸载所有依赖关系。
肖恩·斯坦斯'17

这是真正的答案。结合肖恩的使用建议-force。这对我有用。


31

试试这个:

get-package | uninstall-package -removedependencies -force

15

如果要从解决方案中的每个项目中卸载每个NuGet软件包,请在NuGet软件包管理器控制台中使用它:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }

4
好答案。一个项目的脚本:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin

10

在我的情况下,使用-Force参数留下了项目文件的修改内容,以及对某些二进制文件的引用,这些文件在正常卸载软件包时应已删除。

这是一种幼稚的方法,无需使用-Force参数即可卸载特定项目中的所有软件包。实际上,它会尝试一遍又一遍地卸载软件包,直到没有剩余的软件包为止,因此您会看到一些错误,其中提到了相关的软件包(如果有的话),但是随着每次迭代删除叶子软件包时,它们的出现越来越少。

还值得一提的是,我仅在PackageManager控制台中测试了以下PowerShell片段。(“工具> NuGet软件包管理器>软件包管理器控制台”)

卸载解决方案中所有项目的所有软件包

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }

只删除包含单词“ WildCardSearch ”的项目

while((Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*'  | Get-Package).Length -gt 0) { Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*' | Get-Package | Uninstall-Package }

请注意,如果除了依赖软件包以外,还有其他问题会阻止软件包的卸载,则此代码段将永久运行,直到您手动将其停止为止。


3

我不认为这是可能的,因此请立即卸载所有软件包。但是,正如您已经指出的,您可以卸载软件包,但也可以通过以下步骤告诉它卸载其依赖项:

卸载软件包OpenIdPortableArea –RemoveDependencies

这是Marcus Hammarberg撰写的博客,对此进行了说明:http : //www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html


3
当1个程序包依赖于许多其他程序包时,“删除依赖项”起作用。当N个软件包依赖于核心软件包(例如Boost)时,它将不起作用。您需要一个接一个地手动删除NuGet Boost软件包,这很麻烦。
quant_dev

1

虚拟的老派循环:

$packages = get-package
$packageId = "Apache.NMS.ActiveMQ"


$counter = 1
foreach($package in $packages){     
    if($package.Id -eq $packageId)
    {   
        Write-Host "`n$counter-Deleting Package:`n"
        $package        
        Uninstall-Package -Id $packageId -ProjectName $package.ProjectName -RemoveDependencies 
        Write-Host "`n============================================`n"
        $counter++
    }
}

1

更新了脚本,以删除VS解决方案中单个项目的所有nuget软件包:

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}

0

使用软件包管理器控制台自动还原(卸载然后安装)项目中的软件包:

更新包-重新安装

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.