gỡ bỏ gói nuget khỏi giải pháp


148

Tôi đã thêm tính năng khôi phục gói nuget gần đây vào một giải pháp bằng cách sử dụng 'Kích hoạt khôi phục gói NuGet': http://docs.nuget.org/docs/workflows/USE-nuget-without-commmit-packages

Tuy nhiên, nó đã phá vỡ máy chủ xây dựng của tôi và tôi không có thời gian để sửa nó, vì vậy tôi muốn xóa nó. Theo như tôi biết thì không có tùy chọn nào, vì vậy tôi đã xóa thủ công dòng sau khỏi tất cả các tệp * .csproj của mình:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

Vấn đề bây giờ là mỗi khi các tệp * .csproj của tôi được kiểm tra hoặc mở giải pháp của tôi, dòng sẽ tự động được thêm lại, phá vỡ bản dựng của tôi nếu tôi vô tình kiểm tra nó trong :(

Bất kỳ ý tưởng làm thế nào tôi có thể loại bỏ nó vĩnh viễn?

CẬP NHẬT: mặc dù câu trả lời dưới đây, nó vẫn tiếp tục quay trở lại khi mở giải pháp, bất cứ ai có cùng một vấn đề?


2
Bạn có thể quay ngược lại bộ thay đổi trong Kiểm soát nguồn không?
Betty

Vâng, nó là một thay đổi khá lớn, nhưng nhờ nhận xét của bạn, tôi đã xem và có vẻ như nó cũng đã thêm một thư mục .nuget trong đường dẫn giải pháp, cũng xóa nó để xem liệu nó có khắc phục được sự cố không
Wiebe Tijsma

Bạn đã quản lý để sửa chữa máy chủ xây dựng? (và đó có phải là teamcity không?), bởi vì dòng dự án nhập khẩu mà bạn trích dẫn ở trên là nguyên nhân khiến cho việc xây dựng teamcity của tôi thất bại
Baldy

@Baldy Không, chúng tôi đang sử dụng TFS Build và tôi không thực sự tìm kiếm giải pháp, chỉ gỡ bỏ nó (vẫn có kế hoạch lặn vào đó sau)
Wiebe Tijsma

3
Tôi đã tạo một sự cố cho nhóm NuGet để khắc phục sự cố này. Vui lòng truy cập - bình chọn tại nuget.codeplex.com/workitem/3756
deadlydog

Câu trả lời:


214

Tôi trông không được tốt lắm, có một thuộc tính khác được thêm vào các tệp dự án:

<RestorePackages>true</RestorePackages>

Chỉ cần xóa phần này cũng như tất cả các dòng này theo cách thủ công khỏi tất cả các tệp * .csproj:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

CẬP NHẬT:

Hóa ra đó là một bugger nhỏ dai dẳng, nếu bạn đang chỉnh sửa thủ công các tệp dự án của mình, hãy đảm bảo đóng giải pháp và xóa tất cả các dòng khỏi dự án cùng một lúc , nếu không chúng sẽ được thêm lại một lần nữa khi dự án tải lại ...

CẬP NHẬT2:

Xóa thư mục .nuget khỏi thư mục gốc

CẬP NHẬT3:

Phiên bản mới hơn của NuGet thêm một phần khác mà bạn cần xóa:

 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Cập nhật4

Bên NuGet.Targetstrong .nugetthư mục nằm trong thư mục, có một phần khác được thêm vào các dự án mới ... chuyển nó thành false.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>

7
Tôi đã thấy rằng cũng có một <Import Project="$(SolutionDir)\.nuget\nuget.targets" />phần cuối của tệp .csproj cần được xóa thủ công.
TimDog

6
HẠ! lùi lại thật chậm :)
TimDog

5
Điều này cũng đã làm tôi khó chịu. Nếu các dự án của bạn nằm trong nhiều giải pháp khác nhau, tính năng khôi phục gói sẽ gây ra nhiều vấn đề.
Damian

7
"Hãy chắc chắn rằng bạn đóng giải pháp" thực sự có tầm quan trọng chính ở đây, vì VS2010 dường như lưu trữ các tệp csproj / msbuild (mà không chọn một số sửa đổi nhất định). Tôi đã không nhận thấy hành vi này trong VS2012, nhưng điều này đã làm tôi khó chịu khi sửa đổi các tệp này trong VisualStudio.
Xavier Decoster

4
Tôi đã tạo một sự cố cho nhóm NuGet để khắc phục sự cố này. Vui lòng truy cập - bình chọn tại nuget.codeplex.com/workitem/3756
deadlydog

48

Để tắt khôi phục gói Nuget:

  1. Xóa thư mục .nuget
  2. Xóa các dòng cụ thể khỏi tất cả các tệp .csproj

Các dòng cần xóa:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

Lưu ý: Đảm bảo bạn thực hiện tất cả các thay đổi trong một lần trước khi tải lại giải pháp nếu không nó sẽ thêm lại chúng.

Điều này dựa trên bài viết sau: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Ngoài ra, bạn có thể muốn kiểm tra kỹ xem tùy chọn này có bị vô hiệu hóa không: http://docs.nuget.org/docs/workflows/USE-nuget-without-commmit-packages


Tôi đã tạo một sự cố cho nhóm NuGet để khắc phục sự cố này. Vui lòng truy cập - bình chọn tại nuget.codeplex.com/workitem/3756
deadlydog

1
Cảm ơn, đối với tôi, đó chỉ là không gắn nhãn tùy chọn đó
Maarten Kieft

Tôi đã sử dụng công cụ IFix rất thành công trong việc dọn dẹp repos với nhiều dự án. Về cơ bản nó tự động hóa các bước này. visualstudiogallery.msdn.microsoft.com/...
angularsen

Thư mục .nuget bị ẩn và bạn cần xóa nó khỏi thư mục không chỉ dự án.
Erik Bergstedt

8

Đây không phải là thiết lập ở đây sao?

Tùy chọn ... -> Trình quản lý gói Nuget -> [bỏ chọn] Cho phép Nuget tải xuống các gói bị thiếu

nhập mô tả hình ảnh ở đây

Tôi đang sử dụng Visual Studio Professional + Resharper 8.2


Tôi đã xóa thư mục gói và xóa bộ đệm gói để khắc phục sự cố của tôi. Cảm ơn!
Tresto

1
Không, nó không cập nhật các tệp .proj sau - vì vậy vấn đề trở lại - nhưng cũng tốt để làm điều đó ở đây :-)
schmoopy

Cửa sổ đầu ra cho thấy điều này trong khi xây dựng: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'nó chỉ là một xác nhận rằng đây sẽ là con đường để đi.
Moslem Ben Dhaou

1
Điều này không liên quan đến Khôi phục gói Nuget. Các phiên bản cũ của VS có một mục trình đơn ngữ cảnh cho các dự án có tên là Kích hoạt Gói Nuget Khôi phục Gói sẽ tạo một .nuget/thư mục và sửa đổi của bạn .csprojđể tham chiếu một .targetstệp. Bạn phải cam kết nuget.exevới VCS của bạn (eww, giải quyết vấn đề nuget giải quyết!) Và sự xấu xí như thế. Ngày nay, msbuild /restoretồn tại và khôi phục gói tích hợp của VS. OP đang hỏi làm thế nào để loại bỏ cách làm việc cũ, xấu, không phải cách vô hiệu hóa hỗ trợ khôi phục gói tích hợp chính xác của VS.
binki

5

Các giải pháp hiện đang sử dụng khôi phục gói tích hợp MSBuild có thể được chuyển sang Khôi phục gói tự động. Từ những gì tôi hiểu, điều này sẽ giúp những người đang gặp phải vấn đề xây dựng CI. (Xin hãy sửa tôi nếu tôi nhầm).

Vui lòng tham khảo tài liệu trên trang web nuget: Di chuyển các giải pháp tích hợp MSBuild để sử dụng Khôi phục gói tự động tại http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Có thông tin để chuyển đổi có và không có TFS.

David Ebbo cũng đăng một số thông tin tại http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html



3

NuGet có một bài đăng trên blog về việc chuyển sang khôi phục gói tự động: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Có một tập lệnh powershell được tham chiếu trong bài đăng trên blog sẽ tự động loại bỏ các dòng cần thiết (và đệ quy): https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Cung cấp tùy chọn Khôi phục gói NuGet trực tiếp được đánh dấu là Không sửa: https://nuget.codeplex.com/workitem/1883


2

Tôi đã làm theo giải pháp được chấp nhận nhưng không có kết quả bằng cách sử dụng 2012. Mặc dù vậy, điều này đã làm việc,

  1. Đóng hoàn toàn VS
  2. Cập nhật <RestorePackages>true</RestorePackages>đến <RestorePackages>false</RestorePackages>và xóa <Import Project="$(SolutionDir)\.nuget\nuget.targets" />dòng
  3. Cũng đổi tên thành nuget.exeđểnuget.exe.NotExe

2

Đối với bất kỳ ai vẫn cần dọn dẹp một dự án bằng cách sử dụng khôi phục gói NuGet kiểu cũ, công cụ IFix có sẵn ở đây sẽ tự động hóa quy trình.

Chỉ cần chạy trình cài đặt ( IFixsẽ được thêm vào PATH) và sau đó chạy như sau:

IFix nugetrestore --fix

Bạn có thể chạy nó trong chế độ kiểm tra trước để xem những gì nó sẽ dọn sạch:

IFix nugetrestore --check

1

Tôi gặp vấn đề tương tự. Cuối cùng tôi đã làm gì: 1) đi vào từng tệp .csproj của dự án trong giải pháp, mở nó trong notepad sau đó loại bỏ phần của xml và lưu lại.

2) Sau đó, tôi đã xóa tất cả các tệp pack.config trong toàn bộ giải pháp.

3) Sau đó, tôi phải xóa các thư mục .nuget và gói.

Tại thời điểm này, tôi đã có một giải pháp hoàn toàn miễn phí NuGet.

4) Sau đó, tôi đã tham chiếu thủ công bất kỳ DLL cần thiết nào và nhấn biên dịch và giải pháp chạy như một nhà vô địch mà không cần các gói NuGet.


1

Chuyển đến [$(SolutionDir)\.nuget\nuget.targets] .nugetthư mục giải pháp của bạn nơi bạn có thư mục và nuget.targetstệp trong đó xóa thư mục đó và thay đổi xóa các dòng khỏi csproj của bạn lần cuối cùng.

Vấn đề sẽ không trở lại để làm phiền bạn một lần nữa.



0

Tôi đã vô tình kích hoạt tùy chọn "khôi phục gói" này trong khi mở dự án của mình trong RC VS2012 và bắt đầu gặp các lỗi trông giống như:

"Lỗi 1 Không thể định vị 'C: \ FolderX \ someProject.nuget \ nuget.exe'"

Để khắc phục lỗi, tôi đã làm theo các hướng dẫn ở trên, mở mở từng tệp dự án trong notepad và xóa dòng RestorePackage đó.


0

Tôi đã có thể giải quyết vấn đề này bằng cách thực hiện các bước sau:

1) đảm bảo bạn sao lưu tất cả các thay đổi tệp thanh toán hiện tại của bạn.

2) xóa vật lý thư mục giải pháp khỏi C: \ (đường dẫn được ánh xạ tới TFS).

3) nhận được mới nhất từ ​​TFS cho giải pháp của bạn.

4) sao chép (nếu có) các thay đổi của bạn từ bản sao lưu bạn đã thực hiện ở bước 1.

Hy vọng rằng sẽ giúp!


-2

Tôi gặp vấn đề chính xác tương tự và đã cố gắng xóa tất cả các thẻ .nuget và RestorePackage khỏi các tệp dự án nhưng một dự án sẽ không tải lại cho dù tôi đã kiểm tra nó kỹ lưỡng như thế nào đối với các thẻ .nuget và RestorePackages. Tôi đoán có một số tài liệu tham khảo ẩn cho điều này ở đâu đó.

Cuối cùng, dễ dàng hơn là chỉ sao chép các tệp và tạo một dự án mới và nhập nó vào giải pháp.


-8

Nuget hút. Chỉ cần loại bỏ các nugets và loại bỏ hoặc nhận xét các thành phần gói từ gói.config trong thư mục gốc của các dự án có vấn đề này. Sử dụng tài liệu tham khảo trực tiếp vào một số thư mục lib thay thế.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>

Nó 'hút', như bất kỳ sản phẩm nào khác, nếu bạn không biết cách sử dụng và không nỗ lực để hiểu nó.
Wiebe Tijsma

Điều đó chắc chắn, nhưng trong sự lựa chọn của tôi, tôi không đủ khả năng kiểm soát dự án của mình. Ngoài ra GUI Nuget cần một số nâng cấp nghiêm túc. 1. Nó không trực quan, 2. Thật khó để quản lý gói 3. Thật khó để tắt khôi phục 4. Tải xuống các gói không cần thiết 5. Đôi khi, nó không thể khôi phục nhịp tim
Igor N

Tôi đồng ý ở một mức độ nào đó, mặc dù tôi nghĩ rằng nó thực sự đánh bại việc không có người quản lý gói nào cả. Có vẻ như họ đang làm việc với các nâng cấp GUI nghiêm trọng cho nuget
Wiebe Tijsma
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.