ฉันจะถอนการติดตั้งแพ็คเกจ * all * nuget จากโซลูชันใน Visual Studio ได้อย่างไร


91

ฉันรู้ว่าฉันสามารถถอนการติดตั้งแพ็คเกจจากคอนโซล PM ได้ ฉันประสบปัญหาการพึ่งพากับโปรเจ็กต์อื่นและฉันต้องการเริ่มต้นใหม่และฉันต้องการลบแพ็คเกจทั้งหมดในนัดเดียว มีวิธีไหม?

คำตอบ:


135

Get-Packageที่จะได้รับแพ็กเกจทั้งหมดจากโครงการทั้งหมดในการใช้วิธีการแก้ปัญหา Get-Package -ProjectName "YourProjectName"ที่จะได้รับแพคเกจทั้งหมดจากการใช้โครงการเฉพาะ


ลบแพ็คเกจทั้งหมดออกจากโปรเจ็กต์ทั้งหมดในโซลูชัน

ระวัง: นี้จะถอนการติดตั้งทุกแพคเกจในการแก้ปัญหา หากใช้-Forceพารามิเตอร์แพ็กเกจจะถูกลบออกแม้ว่าจะมีการอ้างอิง

Get-Package | Uninstall-Package -RemoveDependencies -Force


ลบแพ็กเกจทั้งหมดออกจากโปรเจ็กต์เฉพาะภายในโซลูชัน

ระวัง: นี้จะถอนการติดตั้งทุกแพคเกจในโครงการ หากใช้-Forceพารามิเตอร์แพ็กเกจจะถูกลบออกแม้ว่าจะมีการอ้างอิง

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

27
ฉันแนะนำให้เพิ่มพารามิเตอร์ -Force ในตอนท้าย หากไม่มีฉันจะไม่สามารถถอนการติดตั้งการอ้างอิงทั้งหมดของฉันตามการอ้างอิงกับแพ็คเกจ NuGet อื่น ๆ
Sean Stayns

นี่คือคำตอบที่แท้จริง -forceรวมกับข้อเสนอแนะของฌอนกับการใช้งาน สิ่งนี้ได้ผลสำหรับฉัน
Spikee

86

ในคอนโซลตัวจัดการแพ็คเกจให้พิมพ์:

รับแพ็คเกจ | ถอนการติดตั้งแพคเกจ - ถอนการพึ่งพา


14
เพื่อไม่ให้ติดอยู่ในกราฟอ้างอิงที่ซับซ้อนให้ใช้-Forceสวิตช์
Alireza

12
คำเตือน: การยกย่องนี้จะถอนการติดตั้งแพ็คเกจทั้งหมดภายในโซลูชันทั้งหมด
เจ


15

หากคุณต้องการถอนการติดตั้ง NuGet Package ทั้งหมดจากทุกโครงการในโซลูชันให้ใช้สิ่งนี้ในคอนโซล NuGet Package Manager:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }

4
คำตอบที่ดี สคริปต์สำหรับโครงการเดียว:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin

10

การใช้พารามิเตอร์ -Force ในกรณีของฉันทิ้งการแก้ไขไฟล์โครงการและการอ้างอิงไปยังไบนารีบางรายการที่ควรถูกลบออกเมื่อถอนการติดตั้งแพ็กเกจตามปกติ

นี่เป็นวิธีที่ไร้เดียงสาในการถอนการติดตั้งแพ็คเกจทั้งหมดจากโปรเจ็กต์เฉพาะโดยไม่ต้องใช้พารามิเตอร์ -Force มันพยายามถอนการติดตั้งแพ็กเกจซ้ำแล้วซ้ำอีกอย่างมีประสิทธิภาพจนกว่าจะไม่มีแพ็กเกจเหลืออยู่ดังนั้นคุณจะเห็นข้อผิดพลาดบางอย่างที่กล่าวถึงแพ็กเกจที่ขึ้นต่อกัน (หากคุณมี) แต่จะเปิดขึ้นน้อยลงเรื่อย ๆ เมื่อแพ็กเกจ leaf ถูกลบการทำซ้ำแต่ละครั้ง

สิ่งที่ควรค่าแก่การกล่าวถึงฉันได้ทดสอบตัวอย่าง PowerShell ต่อไปนี้ในคอนโซล PackageManager เท่านั้น ("เครื่องมือ> NuGet Package Manager> คอนโซลตัวจัดการแพ็คเกจ")

ถอนการติดตั้งแพ็คเกจทั้งหมดจากโปรเจ็กต์ทั้งหมดในโซลูชัน

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 }

โปรดทราบว่าหากคุณมีปัญหาอื่นนอกเหนือจากแพ็กเกจที่เกี่ยวข้องซึ่งป้องกันไม่ให้ถอนการติดตั้งแพ็กเกจข้อมูลโค้ดนี้จะทำงานตลอดไปจนกว่าคุณจะหยุดด้วยตนเอง


3

ฉันไม่เชื่อว่าจะเป็นไปได้ดังนั้นให้ยกเลิกการติดตั้งแพ็คเกจทั้งหมดในครั้งเดียว อย่างไรก็ตามตามที่คุณระบุไว้แล้วว่าคุณสามารถยกเลิกการติดตั้งแพ็กเกจได้ แต่คุณสามารถบอกให้ยกเลิกการติดตั้งการอ้างอิงได้โดยทำดังต่อไปนี้:

ถอนการติดตั้งแพ็คเกจ OpenIdPortableArea –RemoveDependencies

นี่คือบล็อกของ Marcus Hammarberg อธิบายสิ่งนี้: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html


3
"ลบการอ้างอิง" ทำงานเมื่อ 1 แพ็กเกจขึ้นอยู่กับแพ็กเกจอื่น ๆ ไม่ทำงานเมื่อแพ็คเกจ N ขึ้นอยู่กับคอร์หนึ่ง (เช่น Boost) คุณต้องลบแพ็คเกจ NuGet Boost ด้วยตนเองทีละรายการซึ่งเป็นความเจ็บปวด
quant_dev

1

อัปเดตสคริปต์เพื่อลบแพ็คเกจ nuget ทั้งหมดสำหรับโครงการเดียวในโซลูชัน VS:

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

0

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

0

การกู้คืนอัตโนมัติ (ถอนการติดตั้งแล้วติดตั้ง) ของแพ็กเกจในโปรเจ็กต์โดยใช้ Package Manager Console:

อัปเดตแพ็คเกจ - ติดตั้งใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.