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

问题描述 投票:75回答:8

我知道我可以从PM控制台中卸载软件包。我在另一个项目中遇到了一些依赖问题我想重新开始,我需要一次删除所有软件包。有办法吗?

visual-studio-2015 visual-studio-2013 visual-studio-2017 nuget
8个回答
94
投票

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

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

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

Get-Package | Uninstall-Package -RemoveDependencies -Force

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

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

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

83
投票

在Package Manager控制台中,只需键入:

获取包|卸载程序包-removedependencies


29
投票

尝试一下:

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} }

9
投票

在我的情况下,使用-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 }

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


2
投票

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

Uninstall-Package OpenIdPortableArea –RemoveDependencies

[这里是Marcus Hammarberg的博客,对此进行了解释:http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html


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++
    }
}

0
投票

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

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
© www.soinside.com 2019 - 2024. All rights reserved.