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

Visual studio 2015 如何从Visual Studio中的解决方案中卸载*all*nuget软件包,visual-studio-2015,visual-studio-2013,visual-studio-2017,nuget,Visual Studio 2015,Visual Studio 2013,Visual Studio 2017,Nuget,我知道我可以从PM控制台卸载软件包。 我在另一个项目中遇到了一些依赖性问题 我想重新开始,我需要一次删除所有包。 有办法吗?我认为这是不可能的,所以请立即卸载所有软件包。但是,正如您已经指出的,您可以取消安装程序包,但也可以通过以下操作让它取消安装其依赖项: 卸载程序包OpenIdPortableArea–删除依赖项 下面是Marcus Hammarberg的博客,解释如下:在Package Manager控制台中键入: 获取软件包|卸载软件包-removedependencies 要从解决方案

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

我认为这是不可能的,所以请立即卸载所有软件包。但是,正如您已经指出的,您可以取消安装程序包,但也可以通过以下操作让它取消安装其依赖项:

卸载程序包OpenIdPortableArea–删除依赖项


下面是Marcus Hammarberg的博客,解释如下:

在Package Manager控制台中键入:

获取软件包|卸载软件包-removedependencies


要从解决方案中的所有项目获取所有包,请使用
get Package
。要从特定项目获取所有包,请使用
get-Package-ProjectName“YourProjectName”


从解决方案中的所有项目中删除所有包 小心:这将卸载解决方案中的所有软件包。如果使用了
-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} }
试试这个:

get-package | uninstall-package -removedependencies -force

在我的例子中使用-Force参数会留下项目文件修改和对一些二进制文件的引用,这些文件在正常卸载软件包时应该被删除

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

同样值得一提的是,我只在PackageManager控制台中测试了以下PowerShell代码段。(“工具>NuGet包管理器>包管理器控制台”)

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

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }
仅删除包含单词“WildCardSearch”的项目


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

Dummy old school for loop:

$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}
使用软件包管理器控制台自动恢复(卸载和安装而不更新到最新版本)软件包:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }
更新包-重新安装

。。。或仅针对特定项目:


更新软件包-重新安装-Project ProjectName

当一个软件包依赖于许多其他软件包时,“删除依赖项”起作用。当N个包依赖于核心包(例如Boost)时,它不起作用。您需要一个接一个地手动删除NuGet Boost包,这是一个痛苦的问题。答案很好。单个项目的脚本:
$packages=Get-Package-ProjectName-MyProjectName;foreach($packages中的package){Uninstall package-ProjectName-MyProjectName-Id$package.Id-Force}
要避免陷入复杂的依赖关系图,请使用
-Force
开关。警告:这将卸载整个解决方案中的所有包。我建议在最后添加-Force参数。没有它,我就无法卸载所有依赖项,这些依赖项基于与其他NuGet软件包的依赖项。这才是真正的答案。结合肖恩的建议使用
-force
。这对我有用。
$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++
    }
}
$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}