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

时间:2015-02-19 00:31:48

标签: visual-studio-2015 visual-studio-2013 visual-studio-2017 nuget

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

9 个答案:

答案 0 :(得分:87)

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


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

  

注意:这将卸载解决方案中的所有包。如果使用Get-Package | Uninstall-Package -RemoveDependencies -Force 参数,即使存在依赖项,也会删除包。

-Force


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

  

小心:这将卸载项目中的所有包。如果使用Get-Package -ProjectName "YourProjectName" | Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force 参数,即使存在依赖项,也会删除包。

evaluate

答案 1 :(得分:82)

在Package Manager控制台中输入:

  

get-package | uninstall-package -removedependencies

答案 2 :(得分:28)

试试这个:

get-package | uninstall-package -removedependencies -force

答案 3 :(得分: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 :(得分:8)

在我的案例中使用-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 }

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

答案 5 :(得分:2)

我不相信这是可能的,所以一次卸载所有包。但是,正如您已经指出的那样,您可以卸载软件包,但您也可以告诉它卸载依赖项,执行以下操作:

  

Uninstall-Package OpenIdPortableArea -RemoveDependencies

以下是Marcus Hammarberg的博客解释:http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

答案 6 :(得分:1)

虚拟老派for循环:

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

使用“程序包管理器控制台”自动还原(卸载并安装)项目中的程序包:

更新包-重新安装