【问题标题】:How do I uninstall *all* nuget packages from a solution in Visual Studio如何从 Visual Studio 中的解决方案中卸载 *all* nuget 包
【发布时间】:2021-05-28 16:17:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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


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

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

    Get-Package | Uninstall-Package -RemoveDependencies -Force
    


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

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

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

    【讨论】:

    • 我建议在最后加上 -Force 参数。没有它,我无法卸载基于与其他 NuGet 包的依赖关系的所有依赖关系。
    • 这才是真正的答案。结合肖恩的建议使用-force。这对我有用。
    【解决方案2】:

    在包管理器控制台中输入:

    获取包 |卸载包-removedependencies

    【讨论】:

    • 为了不陷入复杂的依赖关系图中,请使用-Force 开关。
    • 警告:这个推荐将卸载整个解决方案中的所有包。
    【解决方案3】:

    试试这个:

    get-package | uninstall-package -removedependencies -force
    

    【讨论】:

      【解决方案4】:

      如果您想从解决方案中的每个项目中卸载每个 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}
      【解决方案5】:

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

      这是一种无需使用 -Force 参数即可从特定项目中卸载所有包的简单方法。实际上,它会一遍又一遍地尝试卸载包,直到没有包剩下,所以你会看到一些提到依赖包的错误(如果你有的话),但是随着叶包在每次迭代中被删除,它们会越来越少地出现。

      另外值得一提的是,我只在 PackageManager 控制台中测试了以下 PowerShell sn-ps。 (“工具 > 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 }
      

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

      【讨论】:

        【解决方案6】:

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

        卸载-Package OpenIdPortableArea –RemoveDependencies

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

        【讨论】:

        • “删除依赖项”在 1 个包依赖于许多其他包时有效。当 N 个包依赖于核心包(例如 Boost)时,它不起作用。需要手动一个一个地删除 NuGet Boost 包,很痛苦。
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          使用包管理器控制台自动恢复(卸载和安装而不更新到最新版本)包:

          更新包-重新安装

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

          Update-Package -Reinstall -Project ProjectName

          【讨论】:

            【解决方案9】:

            虚拟的老式 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++
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多