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

dgo*_*rti 75 nuget visual-studio-2013 visual-studio-2015 visual-studio-2017

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

Nor*_*man 95

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


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

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

Get-Package | Uninstall-Package -RemoveDependencies -Force
Run Code Online (Sandbox Code Playgroud)


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

小心:这将卸载项目中的所有包.如果使用参数,即使存在依赖项,也会删除包.-Force

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
Run Code Online (Sandbox Code Playgroud)

  • 我建议在最后添加-Force参数.没有它,我无法根据与其他NuGet包的依赖关系卸载所有依赖项. (25认同)

小智 83

在Package Manager控制台中输入:

get-package | uninstall-package -removedependencies

  • 要不陷入复杂的依赖关系图,请使用`-Force`开关. (13认同)
  • 警告:此推荐将卸载整个SOLUTION中的所有软件包. (11认同)

AHA*_*AHA 29

试试这个:

get-package | uninstall-package -removedependencies -force
Run Code Online (Sandbox Code Playgroud)


Mic*_*eyn 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} }
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.单个项目的脚本:`$ packages = Get-Package -ProjectName MyProjectName; foreach($ package in $ packages){Uninstall-Package -ProjectName MyProjectName -Id $ package.Id -Force}` (4认同)

Nat*_*han 9

在我的案例中使用-Force参数会导致项目文件修改和对正常卸载软件包时应该删除的一些二进制文件的引用.

这是一个简单的方法,可以在不使用-Force参数的情况下从特定项目中卸载所有包.实际上,它会一次又一次地尝试卸载软件包,直到没有软件包为止,所以你会看到一些提到依赖软件包的错误(如果你有的话),但随着每次迭代删除叶包,它们会越来越少.

另外值得一提的是,我仅在PackageManager控制台中测试了以下PowerShell代码段.("工具> NuGet包管理器>包管理器控制台")

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

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }
Run Code Online (Sandbox Code Playgroud)

仅删除包含" 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 }
Run Code Online (Sandbox Code Playgroud)

请注意,如果除了依赖软件包之外还有另一个问题阻止卸载软件包,则此代码段将永久运行,直到您手动停止它为止.


loa*_*ger 4

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

\n\n
\n

卸载包 OpenIdPortableArea \xe2\x80\x93RemoveDependencies

\n
\n\n

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

\n

  • 当 1 个包依赖于许多其他包时,“删除依赖项”就起作用。当N个包依赖于核心包(例如Boost)时,它不起作用。您需要手动将 NuGet Boost 包一一删除,这很痛苦。 (3认同)