12

Nơi lưu trữ các tệp nhị phân cần thiết để tạo tự động trên Hệ thống nhóm? Bạn có lưu trữ chúng cùng với mã trong SCM hoặc một nơi khác không? Có một số lượng lớn các tệp nhị phân trong SCM gây ra bất kỳ vấn đề về hiệu năng nào với controol nguồn không?Có một thay thế .NET cho các kho lưu trữ đồ tạo tác Java như Nexus hay Artifactory không? Bạn lưu trữ DLL phiên bản ở đâu?

Có nhu cầu có thể hoàn nguyên về phiên bản cũ của một số thư viện bên ngoài để khắc phục lỗi trong phiên bản đã phát hành, tuy nhiên các phiên bản không tương thích. Việc phân nhánh sẽ thực hiện thủ thuật, nhưng tôi nghĩ rằng việc lưu trữ các tệp nhị phân cùng với mã là chống mẫu.

Mọi sự hoan nghênh đều được hoan nghênh.

+0

Dự án Refix được đề cập bởi @David M lưu trữ các phiên bản của mỗi assembly. –

Trả lời

0

Chúng tôi luôn lưu trữ phụ thuộc nhị phân bên ngoài cùng với mã nguồn, hình ảnh, tập lệnh xây dựng và tất cả các tạo phẩm khác cần thiết để xây dựng một giải pháp cùng nhau trong hệ thống điều khiển phiên bản (VCS). Đó là điều mà VCS tôi thực sự giỏi, và nó đảm bảo rằng chúng tôi có phiên bản thích hợp của tất cả các tạo phẩm cần thiết có sẵn cho bất kỳ phiên bản nào của chúng tôi, ngay cả các nhánh.

Tôi tò mò: Tại sao bạn lại xem đây là một mẫu chống?

+3

Ngày càng có nhiều đội chuyển sang DVCS (ví dụ: Git, Mercurial), nơi mỗi người dùng có toàn bộ lịch sử repo cục bộ. Nếu bạn có một bản xây dựng phụ thuộc vào các tệp nhị phân lớn hoặc không thay đổi, thì đây là một mẫu chống vì nó buộc mỗi repo có bản sao * cục bộ * của mọi nhị phân đã từng sử dụng (thậm chí * sử dụng quá mức *) thay vì * tham chiếu * với các phụ thuộc trực tiếp. Điều này có thể được coi là một antipattern nếu nó ngăn cản các nhóm phá vỡ codebase của họ thành các thành phần độc lập về mặt logic được lưu trữ trong các repos riêng biệt. – Mickalot

+1

Trong 4 năm kể từ khi câu trả lời này, Git và NuGet đã được giới thiệu. Hai công cụ này kết hợp tạo ra một lịch sử phụ thuộc và quản lý phụ thuộc tốt hơn nhiều so với các kho lưu trữ tập trung cũ. Tôi hoàn toàn đồng ý rằng phương pháp tiếp cận ban đầu của tôi không nên được sử dụng nếu bạn có các loại công cụ có sẵn. –

0

Ví dụ: Subversion có svn:externals có thể được sử dụng để nhập nội dung của thư mục khác bằng thư viện của bạn. Bên ngoài có thể được ghim vào một bản sửa đổi cụ thể. Đối với tôi đó là cách tốt hơn và bạn tránh các bản sao làm việc lồng nhau.

1

Tôi đã luôn sử dụng svn: externals cho điều này trong quá khứ, như được mô tả bởi cringe. Nhưng cập nhật chậm trong bản sao làm việc cục bộ. Tôi đã khởi động một dự án nguồn mở với một vài người bạn để thử và giải quyết vấn đề này, vẫn còn ở giai đoạn rất sớm, nhưng nếu đây là vấn đề bạn quan tâm, bạn có thể muốn theo dõi nó (hoặc thậm chí giúp đỡ với nó). Nó được gọi là Refix và là hosted on CodePlex.

0

(Tôi biết đây là một câu hỏi cũ, nhưng đội thường-Java-based của tôi là làm một chút công việc NET và hỏi những câu hỏi tương tự ngay bây giờ, và đây là những gì chúng tôi đã được tìm thấy.)

Nếu bạn đang sử dụng một hệ thống DVCS như Git, thì bạn hoàn toàn đúng rằng bạn có thể gặp phải các sự cố về hiệu năng nếu bạn kiểm tra các thư viện đó trong điều khiển nguồn. Là một điểm tham chiếu, chúng tôi đã chuyển đổi một số dự án lớn (2-5GB) bằng các tệp nhị phân được kiểm tra từ Perforce thành Git. Hiệu suất của các repo Git được nhập khẩu (sử dụng Git 1.9 trên các hộp Windows beefy sử dụng SSD) không phù hợp để phát triển. Chúng tôi đã tinh chỉnh bản dựng của mình để kéo hầu hết những phụ thuộc đó từ một phiên bản Nexus riêng tư và bản repo mỏng hơn đáng kể (50-200MB nguồn) dường như hoạt động tốt.

Nếu bạn đã có một bản sao Nexus có sẵn cho bạn, không có gì ngăn bạn sử dụng nó để lưu trữ các tạo phẩm .NET - theo như Nexus liên quan, một tạo phẩm chỉ là một tệp. Nếu bạn nén các tệp DLL và tệp cấu hình của mình và không thành một tệp nào, Nexus sẽ vui vẻ lưu trữ đó dưới dạng một tạo phẩm được phiên bản và bạn có thể tải xuống/giải nén nó đến đúng vị trí khi bạn cần. (Tôi đã không sử dụng Artifactory, vì vậy tôi không thể bình luận về những gì nó làm.)

Nếu bạn muốn một cái gì đó tích hợp cụ thể với VisualStudio (hoặc MonoDevelop), thì NuGet dường như là câu trả lời mới nổi.

Theo mặc định, có nguồn cấp dữ liệu NuGet trung tâm không có giới hạn truy cập khi đọc.Để lưu trữ, có vẻ như bạn có thể gửi OSS/nhị phân công khai được lưu trữ ở đó và nếu bạn muốn lưu trữ các tệp nhị phân độc quyền/riêng tư, có instructions for setting up your own private NuGet feed.

Nếu bạn có phiên bản Pro của Nexus, it claims to host .NET artifacts and allow access through NuGet, nhưng tôi không có kinh nghiệm sử dụng nó.

3

Cả Nexus và Artifactory hiện hỗ trợ lưu trữ cho các tạo phẩm nhị phân và các phụ thuộc được sử dụng trong phát triển .net. Để xây dựng và tích hợp TFS vào Visual Studio bằng gói NuGet, bạn có thể xem lại this blog.

+1

Liên kết blog hiện là http://www.jfrog.com/continuous-integration-using-tfs-nuget-artifactory/ – Jason

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