我知道我可以从PM控制台卸载软件包。我遇到了另一个项目的一些依赖问题,我想重新开始,我需要一口气删除所有软件包。有办法吗?
Answers:
要从解决方案中的所有项目中获取所有软件包,请使用Get-Package
。要从特定项目中获取所有软件包,请使用Get-Package -ProjectName "YourProjectName"
。
注意:这将卸载解决方案中的所有软件包。如果使用参数,则即使存在依赖关系,也将删除软件包。
-Force
Get-Package | Uninstall-Package -RemoveDependencies -Force
请注意:这将卸载项目中的所有软件包。如果使用参数,则即使存在依赖关系,也将删除软件包。
-Force
Get-Package -ProjectName "YourProjectName" |
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
-force
。这对我有用。
如果要从解决方案中的每个项目中卸载每个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} }
$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
在我的情况下,使用-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 }
请注意,如果除了依赖软件包以外,还有其他问题会阻止软件包的卸载,则此代码段将永久运行,直到您手动将其停止为止。
我不认为这是可能的,因此请立即卸载所有软件包。但是,正如您已经指出的,您可以卸载软件包,但也可以通过以下步骤告诉它卸载其依赖项:
卸载软件包OpenIdPortableArea –RemoveDependencies
这是Marcus Hammarberg撰写的博客,对此进行了说明:http : //www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html
虚拟的老派循环:
$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++
}
}
更新了脚本,以删除VS解决方案中单个项目的所有nuget软件包:
$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}