Phiên bản là thứ mà tôi rất đam mê và đã dành một thời gian dài để cố gắng đưa ra một hệ thống phiên bản dễ sử dụng. Từ những gì bạn đã nói trong câu hỏi của bạn, rõ ràng bạn đã hiểu một điểm quan trọng, số phiên bản lắp ráp không đồng nghĩa với phiên bản sản phẩm. Một cái được điều khiển bằng kỹ thuật, và cái kia được điều khiển bởi doanh nghiệp.
Sau đây giả định rằng bạn sử dụng một số hình thức kiểm soát nguồn và máy chủ xây dựng. Đối với bối cảnh, chúng tôi sử dụng TeamCity và Subversion / Git. TeamCity miễn phí cho một số lượng nhỏ (10) dự án và là một máy chủ xây dựng rất tốt nhưng có những dự án khác, một số trong đó hoàn toàn miễn phí.
Số phiên bản có nghĩa là gì
Những gì một phiên bản có nghĩa là một người có thể có ý nghĩa khác với một người khác, cấu trúc chung là chính, phụ, vĩ mô, vi mô. Cách tôi nhìn vào một số phiên bản là chia nó thành hai phần. Nửa đầu mô tả phiên bản chính (Chính) và mọi cập nhật chính (Nhỏ). Nửa thứ hai cho biết khi nào nó được xây dựng và phiên bản mã nguồn là gì. Số phiên bản cũng có nghĩa là những thứ khác nhau tùy thuộc vào ngữ cảnh, đó có phải là API, Ứng dụng web, v.v.
Major
. Minor
. Build
.Revision
Revision
Đây là con số được lấy từ kiểm soát nguồn để xác định những gì thực sự được xây dựng.
Build
Đây là một con số ngày càng tăng có thể được sử dụng để tìm một bản dựng cụ thể trên máy chủ bản dựng. Đây là một con số quan trọng vì máy chủ xây dựng có thể đã xây dựng cùng một nguồn hai lần với một bộ tham số khác nhau. Sử dụng số bản dựng kết hợp với số nguồn cho phép bạn xác định những gì đã được xây dựng và làm thế nào.
Minor
Điều này chỉ nên thay đổi khi có sự thay đổi đáng kể đối với giao diện công cộng. Chẳng hạn, nếu là API, liệu tiêu thụ mã vẫn có thể biên dịch? Số này phải được đặt lại về 0 khi số Major thay đổi.
Major
cho biết phiên bản của sản phẩm bạn đang sử dụng. Ví dụ: Major của tất cả các hội đồng VisualStudio 2008 là 9 và VisualStudio 2010 là 10.
Ngoại lệ cho quy tắc
Luôn có ngoại lệ cho quy tắc và bạn sẽ phải thích nghi khi bạn bắt gặp chúng. Cách tiếp cận ban đầu của tôi dựa trên việc sử dụng lật đổ nhưng gần đây tôi đã chuyển sang Git. Kiểm soát nguồn như lật đổ và an toàn nguồn sử dụng kho lưu trữ trung tâm có một số có thể được sử dụng để xác định một tập hợp nguồn cụ thể trong một thời gian nhất định. Đây không phải là trường hợp đối với một điều khiển nguồn phân tán như Git. Bởi vì Git sử dụng kho lưu trữ phân tán trên mỗi máy phát triển, không có số tăng tự động mà bạn có thể sử dụng, có một bản hack sử dụng số lượng đăng ký nhưng nó rất xấu. Vì điều này tôi đã phải phát triển cách tiếp cận của tôi.
Major
. Minor
. Macro
.Build
Số sửa đổi đã biến mất, bản dựng đã được chuyển sang vị trí sửa đổi được sử dụng và Macro đã được chèn. Bạn có thể sử dụng macro như thế nào bạn thấy phù hợp nhưng hầu hết thời gian tôi để nó một mình. Vì chúng tôi sử dụng TeamCity, thông tin bị mất từ số sửa đổi có thể được tìm thấy trong bản dựng, điều đó có nghĩa là có một quy trình gồm hai bước nhưng chúng tôi không mất gì cả và là một sự thỏa hiệp chấp nhận được.
Đặt gì
Điều đầu tiên cần hiểu là Phiên bản hội, Phiên bản tệp và Phiên bản sản phẩm không phải khớp. Tôi không ủng hộ việc có các bộ số khác nhau nhưng nó giúp cuộc sống dễ dàng hơn rất nhiều khi thực hiện các thay đổi nhỏ đối với một tổ hợp không ảnh hưởng đến bất kỳ giao diện công cộng nào mà bạn không bị buộc phải biên dịch lại các cụm phụ thuộc. Cách tôi giải quyết vấn đề này là chỉ đặt các số Chính và Số phụ trong Phiên bản hội nhưng để đặt tất cả các giá trị trong Phiên bản tệp. Ví dụ:
- 1.2.0.0 (Lắp ráp)
- 1.2.3.4 (Phân phối tệp)
Điều này cung cấp cho bạn khả năng tung ra các bản sửa lỗi nóng sẽ không phá vỡ mã hiện có vì các phiên bản lắp ráp không khớp nhưng cho phép bạn xem bản sửa đổi / bản dựng của một bản lắp ráp bằng cách xem số phiên bản tệp của nó. Đây là một cách tiếp cận phổ biến và có thể được nhìn thấy trên một số tập hợp nguồn mở khi bạn xem chi tiết lắp ráp.
Bạn với tư cách là Trưởng nhóm sẽ cần có trách nhiệm tăng số phụ khi có yêu cầu thay đổi đột phá. Một giải pháp để đưa ra một thay đổi cần thiết cho một giao diện nhưng không phá vỡ mã trước đó là đánh dấu giao diện hiện tại là lỗi thời và tạo giao diện mới. Điều đó có nghĩa là mã hiện có được cảnh báo rằng phương thức này đã lỗi thời và có thể bị xóa bất cứ lúc nào nhưng không yêu cầu bạn phải phá vỡ mọi thứ ngay lập tức. Sau đó, bạn có thể xóa phương thức lỗi thời khi mọi thứ đã được di chuyển.
Làm thế nào để nối nó với nhau
Bạn có thể thực hiện tất cả các cách trên một cách thủ công nhưng sẽ rất tốn thời gian, sau đây là cách chúng tôi tự động hóa quy trình. Mỗi bước là runnable.
- Xóa
AssemblyVersion
và AssemblyFileVersion
các thuộc tính khỏi tất cả các tệp của ProjectInfo.cs.
- Tạo một tệp thông tin lắp ráp chung (gọi nó là VersionInfo.cs) và thêm nó dưới dạng một mục được liên kết vào tất cả các dự án của bạn.
- Thêm
AssemblyVersion
và AssemblyFileVersion
các thuộc tính cho phiên bản có giá trị "0.0.0.0".
- Tạo một dự án MsBuild xây dựng tệp giải pháp của bạn.
- Thêm vào một tác vụ trước khi bản dựng cập nhật VersionInfo.cs. Có một số thư viện MsBuild mã nguồn mở bao gồm một tác vụ AssociationInfo có thể đặt số phiên bản. Chỉ cần đặt nó thành một số tùy ý và kiểm tra.
- Thêm một nhóm thuộc tính chứa một thuộc tính cho mỗi phân đoạn của số bản dựng. Đây là nơi bạn thiết lập chính và phụ. Số bản dựng và sửa đổi phải được chuyển qua dưới dạng đối số.
Với lật đổ:
<PropertyGroup>
<Version-Major>0</Version-Major>
<Version-Minor>0</Version-Minor>
<Version-Build Condition=" '$(build_number)' == '' ">0</Version-Build>
<Version-Build Condition=" '$(build_number)' != '' ">$(build_number)</Version-Build>
<Version-Revision Condition=" '$(revision_number)' == '' ">0</Version-Revision>
<Version-Revision Condition=" '$(revision_number)' != '' ">$(revision_number)</Version-Revision>
</PropertyGroup>
Hy vọng tôi đã rõ ràng nhưng có rất nhiều liên quan. Hãy hỏi bất kỳ câu hỏi. Tôi sẽ sử dụng bất kỳ thông tin phản hồi để đặt một bài viết blog ngắn gọn hơn cùng nhau.