Có nên thêm thư mục .nuget vào kiểm soát phiên bản không?


107

Với các phiên bản NuGet mới hơn, bạn có thể cấu hình một dự án để tự động khôi phục các gói NuGet để packagesthư mục không cần được đưa vào kho mã nguồn. Tốt.

Tuy nhiên, lệnh này thêm một .nugetthư mục mới và có một tệp nhị phân ở đó, NuGet.exe. Điều này cũng có thể được tạo lại tự động bởi Visual Studio và do đó, việc thêm điều đó vào kiểm soát phiên bản sẽ không đúng. 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.

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


Đây là liên kết xác thực nhất docs.nuget.org/docs/workflows/… và vì nó là một chủ đề cũ. Tôi chỉ muốn chia sẻ thông tin trong bình luận ...
Naveed Butt

Câu trả lời:


47

Bài này đã cũ, bạn không nên sử dụng gói NuGet cấp giải pháp khôi phục 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 trên bản dựng. Vì vậy, thư mục .nuget có thể bị xóa và loại bỏ tùy chọn khỏi các dự án của bạn.

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

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

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

Và thông báo NuGet 4.x RTM, trớ trêu thay lại không hữu ích:

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

CẬP NHẬT 2: Rõ ràng 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 một số vấn đề với việc khôi phục gói phụ thuộc. Tôi chắc chắn rằng tất cả sẽ được giải quyết.



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

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

47

Câu trả lời của @Richard Szalay là đúng - bạn không cần phải commit nuget.exe. Nếu vì một số lý do Visual Studio không tự động tải xuống nuget.exe, hãy đảm bảo rằng bạn có bộ sau thành true trong nuget.targetstệp:

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

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


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

2
Đó là mối quan tâm nhiều hơn về quyền riêng tư. "Hành động đơn giản là đư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 và Đồng ý gói tại blog Nuget
Gan

1
FYI: Khi NuGet.exe không có trong thư mục .nuget, menu ngữ cảnh của Giải pháp sẽ hiển thị "Bật Khôi phục Gói NuGet", mặc dù NuGet Gói Khôi phục đã được định cấu hình. Sau khi xây dựng, tùy chọn sẽ biến mất.
comecme

Đây phải là câu trả lời được chấp nhận, IMO ... Nếu NuGet.exe siêu nhỏ, tôi có thể nói gắn nó vào quyền kiểm soát nguồn và giải quyết bất cứ điều gì bạn phải làm trong tệp bỏ qua của mình. Nhưng nó là 1,5 kg, đủ lớn để tôi luôn làm theo cách của Gan.
Brian MacKay

Nó tải biểu mẫu nuget.exe ở đâu? Điều gì sẽ xảy ra nếu trình xây dựng của tôi không có internet?
bitbonk


20

Bạn cần phải cam kết .nuget\nuget.targets, nhưng không 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 DownloadNuGetExethành truetrong nuget.targets


4

Mặc dù tôi thường không thích ý tưởng thêm exe vào kiểm soát nguồn, nhưng tôi đề nghị rằng kiểm soát nguồn nên 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 nghiên cứu là NuGet sẽ phản ứng như thế nào nếu thư mục đó được đánh dấu là chỉ đọc, điều này TFS sẽ thực hiện khi nó đã được đăng ký.


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 đề nghị rằng có lẽ điều bạn muốn làm là biến 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 kiểm soát nguồn tệp lô cần thiết để có một máy trạm sẵn sàng bắt đầu chỉnh sửa dự án. Tệp lô 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 thức hoạt động chính xác.


1
Tôi nghĩ rằng <RestorePackages>true</RestorePackages>trong tệp * .csproj phải có đủ thông tin cho Visual Studio nhưng có lẽ không phải vậy.
Borek Bernard

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à .nugetnên thêm vào kho của chúng tôi, nhưng được thêm bằng cách 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 đưa 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 tham chiếu 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 sao chép nuget.exenhiều lần trong repo.


Tôi không thể yêu cầu NuGet khôi phục các gói dự án bên ngoài. Điều này đã làm việc cho bạn?
Doguhan Uluca

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 (xác thực IIS 6 + SSL + AD) trong khi Powershell hoặc Plugin mở rộng hoạt động tốt.
si618, 29/02/12

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.