Làm cách nào để xóa các gói NuGet không được tham chiếu bởi bất kỳ dự án nào trong giải pháp của tôi?


141

Bằng cách nào đó trong quá trình nâng cấp lên VS2012 và .NET 4.5, tôi đã khiến NuGet bối rối. Có các gói xuất hiện trong trình quản lý gói (và thư mục gói) mà tôi không thể xóa (tôi tin rằng chúng là các gói ASP.NET NuGet cũ đã được thay thế bằng tên gói mới bằng phiên bản mới. Mỗi gói chỉ có một nút Quản lý - nhưng không có nút gỡ cài đặt. Và khi bạn nhìn xem chúng được sử dụng ở đâu, bạn có thể thấy rằng chúng được tham chiếu bởi không có dự án nào của giải pháp không? Chúng KHÔNG hiển thị Gỡ cài đặt?

Câu trả lời:


108

Bạn có thể sử dụng Bảng điều khiển quản lý gói với lệnh: Uninstall-Package PackageIdđể xóa nó hoặc chỉ xóa thư mục gói khỏi thư mục 'gói' trong thư mục giải pháp. Thông tin thêm về Bảng điều khiển quản lý gói bạn có thể tìm thấy ở đây: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference


8
Cảm ơn Pavel. Tôi có cảm giác bạn chỉ có thể xóa các thư mục. Đó là một chút bối rối bởi vì tôi phải đảm bảo rằng không có gói nào được tham chiếu theo cách thủ công (chúng dường như không có). Tôi vẫn tò mò muốn biết tại sao trình quản lý gói không hiển thị nút Gỡ cài đặt (hoặc xóa).
Howard Pinsley

2
Trình quản lý gói ở cấp độ giải pháp hiển thị tất cả các tham chiếu gói đến các dự án từ giải pháp và bổ sung tất cả các gói được đặt trong thư mục gói, nhưng không được tham chiếu. Đối với gói này không có khả năng gỡ cài đặt trong UI. Tôi đồng ý rằng đó là kết quả của hành vi không chính xác, nhưng trong trường hợp này bạn nên kiểm tra thủ công. Và xóa gói hoặc cài đặt lại khi bạn chắc chắn sẽ cần bạn hay không.
Pavel Bakshy

1
Bằng cách chỉ cần xóa thư mục và quay lại NuGet và xem gói, bằng cách nào đó nó vẫn hiển thị như được cài đặt với dấu tick màu xanh bên cạnh, tốt hơn là thực hiện gỡ cài đặt thích hợp bằng bàn điều khiển.
k80sg

1
@ysrb, đó là một lệnh powershell dùng động từ-danh từ như get-user hoặc remove-item, ví dụ của bạn là danh từ-động từ
Nick Young

1
@ysrb Như Nick Young nói, và bên cạnh đó, nó sẽ là một lời khen khủng khiếp Install-Package.
ProfK

159

Tôi đã tìm thấy một cách giải quyết cho việc này.

  1. Cho phép khôi phục gói và kiểm tra tự động (Tùy chọn / Trình quản lý gói / Chung)
  2. Xóa toàn bộ nội dung của thư mục gói (vào Thùng rác nếu bạn lo lắng!)
  3. Quản lý gói Nuget cho giải pháp
  4. Nhấp vào nút khôi phục.

NuGet sẽ chỉ khôi phục các gói được sử dụng trong giải pháp của bạn. Bạn kết thúc với một bộ gói đẹp, được sắp xếp hợp lý.


1
Điều này sẽ không xóa gói khỏi packages.configkhông xóa các tham chiếu khỏi dự án?
CodeCaster

1
@CodeCaster khó phân tích cú pháp âm của bạn. Không có gì sẽ được gỡ bỏ khỏi cấu hình và tài liệu tham khảo. Ý tưởng ở đây là loại bỏ các gói NuGet không còn được tham chiếu
James L

1
Câu trả lời tuyệt vời! Nếu bạn đang sử dụng TFS, trước tiên bạn nên xóa tất cả nội dung bên trong ./packages trong trình khám phá bộ đếm nguồn để các máy khách khác như máy dựng cũng sẽ loại bỏ các mục dư thừa.
Alexander Schmidt

4
@ sprinter252, nếu bạn đang sử dụng khôi phục gói, bạn không cần phải kiểm tra các gói vào kiểm soát nguồn ở nơi đầu tiên. Đó là một trong những lợi ích chính của việc sử dụng khôi phục gói. Là một phần của việc chuyển đổi sang khôi phục gói, nên đặt quy tắc 'bỏ qua' trên thư mục gói.
Carl Bussema

@CarlBussema Bạn nói đúng. Vì phiên bản NuGet mới, điều này không quá quan trọng vì Nuget sẽ không thêm bất kỳ nhị phân nào vào các thư mục con. Vì vậy, bạn chỉ nhận được cấu trúc thư mục. Nhận xét của tôi liên quan đến hành vi mặc định của TFS (bao gồm cả thư mục gói). Trên TFS Anywhere bỏ qua thường bị bỏ qua ;-). Quan trọng đối với các dự án hỗn hợp với Xamarin.
Alexander Schmidt

17

Đầu tiên mở Bảng điều khiển quản lý gói. Sau đó chọn dự án của bạn từ danh sách thả xuống. Và chạy các lệnh sau để gỡ cài đặt các gói nuget.

Get-Package

để nhận được tất cả các gói bạn đã cài đặt.

và sau đó

Uninstall-Package PagedList.Mvc

--- để gỡ cài đặt gói có tên PagedList.MVC

Thông điệp

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.

Câu trả lời này đã làm việc hoàn hảo cho tôi. Tình huống của tôi là gói chỉ hiển thị dưới tab Cập nhật của hộp thoại ... và khi tôi nhấn Cập nhật, không có dự án nào được cài đặt gói - vì vậy không có cách nào để cập nhật hoặc gỡ bỏ.
azarc3

8

Nếu bạn muốn xóa / gỡ cài đặt gói Nuget được áp dụng cho nhiều dự án trong các giải pháp của bạn, hãy truy cập:

  1. Công cụ-> Trình quản lý gói Nuget -> Quản lý gói Nuget cho Giải pháp

  2. Ở cột bên trái nơi 'Gói đã cài đặt' chọn 'Tất cả', vì vậy bạn sẽ thấy danh sách các gói đã cài đặt và nút Quản lý trên chúng.

  3. Chọn nút Quản lý và bạn sẽ nhận được một cửa sổ bật ra, bỏ chọn hộp kiểm qua tên dự án và Ok nó

Phần còn lại của công việc Trình quản lý gói sẽ làm điều đó cho bạn.


1
Đây chắc chắn là câu trả lời tôi đang tìm kiếm, cảm ơn!
Sal

3

Nếu bạn đã xóa gói bằng tiện ích Gỡ cài đặt và xóa gói mong muốn khỏi thư mục gói theo giải pháp (và bạn vẫn gặp lỗi), chỉ cần mở tệp * .csproj trong trình chỉnh sửa mã và xóa thẻ theo cách thủ công. Ví dụ, tôi muốn thoát khỏi gói Nuget Xamarin.Forms.Alias và tôi đã xóa các dòng này khỏi tệp * .csproj.

Xóa gói nuget khỏi tập lệnh msbuild

Và cuối cùng, đừng quên tải lại dự án của bạn một khi được nhắc trong Visual Studio (sau khi thay đổi tệp dự án). Tôi đã thử nó trên Visual Studio 2015, nhưng nó cũng hoạt động trên Visual Studio 2010 và trở đi.

Hi vọng điêu nay co ich.


2

Một cách khác, là cài đặt gói không sử dụng mà bạn muốn xóa trong bất kỳ dự án nào của giải pháp của bạn, sau đó, gỡ cài đặt nó và Nuget cũng sẽ xóa nó.

Một trình gỡ cài đặt thích hợp là cần thiết ở đây.


Có cách nào để cài đặt nó đúng cách mà không cần cài đặt lại không?
Knox

2

Giải pháp 1

Sử dụng đường ống powershell để nhận các gói và xóa trong một câu lệnh như thế này

Get-Package | Uninstall-Package

Giải pháp 2

Nếu bạn muốn gỡ cài đặt các gói đã chọn, hãy làm theo các bước sau

  1. Sử dụng GetPackagesđể có được danh sách các gói
  2. Tải xuống phần mềm văn bản Nimble
  3. Sao chép đầu ra của GetPackagestrong NimbleText (Đối với mỗi hàng trong cửa sổ danh sách)
  4. Đặt Cột Seperator thành (nếu cần
  5. Loại Uninstall-Package $0(Thay thế bằng cửa sổ mẫu)
  6. Sao chép kết quả và dán chúng vào Gói Quản lý Bảng điều khiển

Đó là tất cả mọi người.


1

Một gói NuGet có thể tham chiếu một gói NuGet khác. Vì vậy, xin vui lòng rất cẩn thận về các phụ thuộc liên gói. Tôi vừa gỡ cài đặt gói bản đồ Google và sau đó đã gỡ cài đặt các gói cơ bản như Newtonsoft, Entity Framework, v.v.

Vì vậy, xóa thủ công gói cụ thể khỏi thư mục gói sẽ an toàn hơn.


1

Từ cửa sổ bảng điều khiển Trình quản lý gói, thường sử dụng bất kỳ lệnh nào bạn đã sử dụng để cài đặt gói để gỡ cài đặt gói đó. Chỉ cần thay thế lệnh INSTALL bằng UNINSTALL .

Ví dụ: để cài đặt PowerTCPTelnet, lệnh là:

Install-Package PowerTCPTelnet -Version 4.4.9

Để gỡ cài đặt tương tự, lệnh là:

Uninstall-Package PowerTCPTelnet -Version 4.4.9


1

VS2019> Công cụ> Tùy chọn> Trình quản lý gói Nuget> Chung> Nhấp vào "Xóa tất cả bộ đệm ẩn của Nuger"


-2

Một cách khác, và rất đơn giản đối với tôi là:

  1. Đi đến Soution của bạn và sau đó nhấp chuột phải vào đây.

  2. Chọn tùy chọn "Gói NUgets được quản lý cho giải pháp". Điều đó mở một cửa sổ Popup, trong đó nhấp vào nút "Cài đặt". Điều này sẽ mở cửa sổ bật lên khác và sau đó tìm kiếm: "Trình quản lý gói".

  3. Tùy chọn bên trong "Trình quản lý gói" bạn có thêm hai tùy chọn (I. Chung II. Nguồn gói) Trong mỗi tùy chọn bỏ chọn tất cả các hộp kiểm.

Bước này vô hiệu hóa NuGet khỏi dự án của bạn.

Tôi hy vọng thực sự giúp bạn.


-2

Nếu bạn muốn sử dụng tùy chọn Visual Studio, vui lòng xem liên kết bên dưới

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-ex hiện-visual-studio-solution/

Bước 1: Trong Visual Studio, chuyển đến Công cụ / Trình quản lý gói NuGet / Quản lý gói NuGet cho Giải pháp

Bước 2: Bỏ chọn (các) dự án của bạn khỏi giải pháp hiện tại

Bước 3: Bỏ chọn (các) dự án và nhấn OK


2
Tốt nhất là viết ra câu trả lời trong StackOverflow thay vì chỉ đăng một liên kết đến nó vì các liên kết có thể hết hạn trong tương lai.
Amadeus Sánchez
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.