Làm cách nào để gỡ cài đặt * tất cả * gói nuget khỏi giải pháp trong Visual Studio


90

Tôi biết tôi có thể gỡ cài đặt gói khỏi bảng điều khiển PM. Tôi gặp phải một số vấn đề phụ thuộc với một dự án khác và tôi muốn bắt đầu lại, và tôi cần xóa tất cả các gói trong một lần. Là có một cách?

Câu trả lời:


132

Để nhận được tất cả các gói từ tất cả các dự án trong việc sử dụng giải pháp Get-Package. Để có được tất cả các gói từ một dự án sử dụng cụ thể Get-Package -ProjectName "YourProjectName".


Xóa tất cả các gói khỏi tất cả các dự án trong giải pháp

Hãy cẩn thận: Thao tác này sẽ gỡ cài đặt TẤT CẢ các gói trong giải pháp . Nếu -Forcetham số được sử dụng, các gói sẽ bị loại bỏ ngay cả khi tồn tại các phụ thuộc.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Xóa tất cả các gói khỏi một dự án cụ thể trong một giải pháp

Hãy cẩn thận: Thao tác này sẽ gỡ cài đặt TẤT CẢ các gói trong dự án . Nếu -Forcetham số được sử dụng, các gói sẽ bị loại bỏ ngay cả khi tồn tại các phụ thuộc.

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

27
Tôi khuyên bạn nên thêm tham số -Force vào cuối. Nếu không có nó, tôi không thể gỡ cài đặt tất cả các phụ thuộc của mình dựa trên các phụ thuộc với các gói NuGet khác.
Sean Stayns

Đây là câu trả lời thực sự. Kết hợp với gợi ý sử dụng của Sean -force. Điều này đã làm việc cho tôi.
Spikee

86

Trong Bảng điều khiển Trình quản lý Gói chỉ cần nhập:

gói nhận | uninstall-package -removedependencies


14
Để không bị mắc kẹt trong biểu đồ phụ thuộc phức tạp, hãy sử dụng -Forcecông tắc.
Alireza

12
CẢNH BÁO: Phần thưởng này sẽ gỡ cài đặt tất cả các gói trong toàn bộ GIẢI PHÁP.
Jacob

31

thử đi:

get-package | uninstall-package -removedependencies -force

15

Nếu bạn muốn gỡ cài đặt mọi Gói NuGet khỏi mọi Dự án trong Giải pháp, thì hãy sử dụng điều này trong Bảng điều khiển Trình quản lý Gói NuGet:

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

4
Câu trả lời chính xác. Kịch bản cho một dự án duy nhất:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin

10

Việc sử dụng tham số -Force trong trường hợp của tôi đã để lại các sửa đổi tệp dự án và tham chiếu đến một số tệp nhị phân mà lẽ ra phải được gỡ bỏ khi gỡ cài đặt gói thông thường.

Đây là một phương pháp đơn giản để gỡ cài đặt tất cả các gói khỏi các dự án cụ thể mà không cần sử dụng tham số -Force. Hiệu quả là nó cố gắng gỡ cài đặt các gói lặp đi lặp lại cho đến khi không còn gói nào, vì vậy bạn sẽ thấy một số lỗi đề cập đến các gói phụ thuộc (nếu có) nhưng chúng sẽ ngày càng ít xuất hiện khi các gói lá bị xóa mỗi lần lặp lại.

Cũng đáng nói hơn là tôi chỉ thử nghiệm các đoạn mã PowerShell sau trong bảng điều khiển PackageManager. ("Công cụ> Trình quản lý gói NuGet> Bảng điều khiển Trình quản lý gói")

Gỡ cài đặt tất cả các gói khỏi tất cả các dự án trong một giải pháp

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }

Chỉ xóa các Dự án có chứa từ " 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 }

Lưu ý rằng nếu bạn gặp sự cố khác ngoài các gói phụ thuộc ngăn việc gỡ cài đặt gói, đoạn mã này sẽ chạy vĩnh viễn cho đến khi bạn dừng nó theo cách thủ công.


3

Tôi không tin rằng điều này có thể thực hiện được vì vậy hãy bỏ cài đặt TẤT CẢ các gói cùng một lúc. Tuy nhiên, như bạn đã chỉ ra rằng bạn có thể hủy cài đặt một gói, nhưng bạn cũng có thể yêu cầu nó bỏ cài đặt các phần phụ thuộc của nó bằng cách sau:

Uninstall-Package OpenIdPortableArea –RemoveDependencies

Đây là một blog của Marcus Hammarberg giải thích điều này: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html


3
"Loại bỏ các gói phụ thuộc" hoạt động khi 1 gói phụ thuộc vào nhiều gói khác. Nó không hoạt động khi N gói phụ thuộc vào lõi (ví dụ: Boost). Bạn cần phải xóa từng gói NuGet Boost theo cách thủ công, đó là một điều khó khăn.
quant_dev

1

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

1

Đã cập nhật một tập lệnh để xóa tất cả các gói nuget cho một dự án trong giải pháp VS:

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

0

Tự động khôi phục (gỡ cài đặt và sau đó cài đặt) các gói trong một dự án bằng Bảng điều khiển Trình quản lý Gói:

Cập nhật-Gói-Cài đặt lại

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.