2012-02-05 40 views
101

Với các phiên bản NuGet mới hơn, có thể cấu hình một dự án để tự động khôi phục các gói NuGet sao cho thư mục packages không cần phải được bao gồm trong kho lưu trữ mã nguồn. Tốt.Thư mục .nuget có nên được thêm vào điều khiển phiên bản không?

Tuy nhiên, lệnh này thêm thư mục .nuget mới và có một tệp nhị phân ở đó, NuGet.exe. Điều này cũng có thể được tái tạo tự động bởi Visual Studio và do đó, nó không cảm thấy chính xác để thêm rằng để kiểm soát phiên bản. Tuy nhiên, nếu không có thư mục này Visual Studio thậm chí sẽ không tải giải pháp đúng cách.

Mọi người giải quyết vấn đề này như thế nào? Thêm .nuget vào kiểm soát nguồn? Chạy một số dòng lệnh script trước khi mở giải pháp?

+0

Có thể là vậy. – davidfowl

+0

Đây là liên kết xác thực nhất http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages và vì đó là một chuỗi cũ. Tôi chỉ muốn chia sẻ thông tin trong bình luận ... –

Trả lời

37

Bài đăng này cũ, bạn không nên sử dụng gói giải pháp NuGet cấp phục hồi nữa. Kể từ phiên bản 2.7+ có một tùy chọn trong thiết lập NuGet để tự động khôi phục các gói khi xây dựng. Vì vậy, thư mục .nuget có thể bị xóa và tùy chọn bị xóa khỏi dự án của bạn.

http://docs.nuget.org/docs/reference/package-restore

UPDATE: Với việc phát hành NuGet 4.x và .NET Chuẩn 2.0, khi bạn sử dụng định dạng csproj mới bây giờ bạn có thể sử dụng tài liệu tham khảo gói, trớ trêu thay reintroducing sự phụ thuộc vào msbuild để khôi phục gói , nhưng bây giờ gói là một công dân hạng nhất của msbuild. Liên kết ở trên cũng có đề cập đến các PackageReference, nhưng việc công bố sau đây chi tiết tốt hơn:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

Và việc công bố 4.x RTM NuGet, mà trớ trêu thay không phải là hữu ích:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

CẬP NHẬT 2: Dường như với VS2017 bạn thậm chí có thể sử dụng tham chiếu gói với các dự án csproj cổ điển, nhưng chúng không tương thích ngược nữa và đã xảy ra sự cố khi khôi phục pa phụ thuộc phụ ckage. Tôi chắc chắn rằng tất cả sẽ được giải quyết.

+8

[Đây là giải thích rõ ràng hơn] (http://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore) về cách di chuyển. Có một [PowerShell script trên Github] (https://github.com/owen2/AutomaticPackageRestoreMigrationScript) –

+0

@CAD Bloke, có trong danh sách đọc ở phía dưới, cảm ơn bạn đã thu hẹp nó xuống. – Jeremy

+0

Bạn có thể dễ dàng cập nhật Nuget trong VS bằng cách sử dụng 'Tools> Extensions & Updates> Updates'. – jocull

4

Mặc dù tôi thường không thích ý tưởng thêm quyền kiểm soát nguồn của exe, tôi khuyên bạn nên kiểm soát nguồn phải chứa bất kỳ thứ gì cần thiết để mở, xây dựng và thực thi dự án.

Trong trường hợp này, có vẻ như thư mục .nuget là một phụ thuộc bắt buộc. Do đó, nó phải được kiểm soát nguồn.

Câu hỏi duy nhất còn lại, mà bạn cần phải nghiên cứu, là cách NuGet sẽ phản ứng nếu thư mục đó được đánh dấu read-only, mà TFS sẽ làm một khi nó đã được kiểm tra trong.


Cập nhật: Tôi đã nghiên cứu thêm một chút về điều này vì tôi chưa bao giờ sử dụng NuGet trước đây. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Tôi cho rằng có lẽ những gì bạn muốn làm là làm cho NuGet trở thành một yêu cầu phải được cài đặt trên mọi máy trạm của nhà phát triển.

Hơn nữa, bạn nên đặt trong nguồn kiểm soát tệp lô cần thiết để có được một trạm làm việc sẵn sàng để bắt đầu chỉnh sửa dự án. Tập tin batch sẽ chạy các lệnh cần thiết để lấy và cài đặt các gói phụ thuộc.

Ngoài ra, tôi muốn nói rằng bạn có thể muốn liên hệ trực tiếp với NuGet để hỏi họ cách chính xác, điều này được cho là hoạt động.

+1

Tôi nghĩ rằng ' true' trong tập tin * .csproj nên là đủ thông tin cho Visual Studio nhưng có lẽ nó không phải là. – Borek

22

Theo this thread, thư mục .nuget phải được kiểm soát phiên bản.

1

Bây giờ nuget hỗ trợ khôi phục gói, chúng tôi đang xem xét kỹ hơn.

Chúng tôi sử dụng Subversion để kiểm soát nguồn, và suy nghĩ ban đầu của tôi là .nuget nên được thêm vào kho lưu trữ của chúng tôi, nhưng được thêm vào sử dụng svn:externals để nó trỏ đến một vị trí duy nhất.

Bằng cách đó, chúng tôi có thể tự động đẩy ra các phiên bản mới cho tất cả các nhà phát triển và dự án. Đối với các dự án trên các nhánh phát hành, thay vì HEAD, chúng tôi có thể chỉ định bản sửa đổi của tài liệu tham khảo svn: externals nếu chúng tôi muốn để nguyên nuget.

Chúng tôi có rất nhiều dự án, vì vậy nó cũng có nghĩa là không nhân đôi nuget.exe nhiều lần trong repo.

+0

Tôi không thể lấy NuGet để khôi phục các gói dự án bên ngoài. Công việc này có phù hợp với bạn không ?. –

+0

Có, mặc dù NuGet.exe dường như đang gặp sự cố khi xác thực với repo cục bộ của chúng tôi (IIS 6 + SSL + AD authentication) trong khi Powershell hoặc Extension Plugin hoạt động tốt. – si618

19

Bạn cần cam kết .nuget\nuget.targets, nhưng không phải nuget.exe. Các mục tiêu sẽ tải xuống exe nếu nó không tồn tại, miễn là bạn thay đổi DownloadNuGetExe thành true trong nuget.mục tiêu

45

Câu trả lời của @Richard Szalay là đúng - bạn không cần phải cam kết nuget.exe. Nếu vì một số lý do Visual Studio không tự động tải về nuget.exe, chắc chắn rằng bạn đã thiết lập sau đây để đúng trong file nuget.targets:

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe> 

Đóng giải pháp VS, mở lại nó và xây dựng nó. Visual Studio sẽ tự động tải xuống nuget.exe ngay bây giờ.

+0

Nhân tiện, ai cũng biết tại sao nó không được đặt thành 'true' theo mặc định? – ajukraine

+2

Đó là một mối quan tâm riêng tư. "Hành động đơn giản đưa ra yêu cầu qua Internet có thể tiết lộ thông tin về người dùng (ví dụ: từ địa chỉ IP của người dùng, chúng tôi có thể ước tính vị trí của cô ấy)." Xem [Bài viết khôi phục gói và bài viết đồng ý tại blog Nuget] (http://blog.nuget.org/20120518/package-restore-and-consent.html) – Gan

+1

FYI: Khi NuGet.exe không có trong thư mục .nuget, menu ngữ cảnh của Solution sẽ hiển thị "Enable NuGet Package Restore", mặc dù NuGet Package Restore đã được cấu hình. Sau khi xây dựng, tùy chọn sẽ biến mất. – comecme

1

Chúng tôi có các tập tin nuget.config trong thư mục, vì nó có các tham chiếu đến máy chủ NuGet nội bộ của chúng tôi, bằng cách sử dụng diện tích Package Sources: https://docs.nuget.org/consume/nuget-config-settings

Ngoài lý do này, bạn nên để cho Visual Studio xử lý các tải về gói.

Các vấn đề liên quan