การกำหนดเวอร์ชันเป็นสิ่งที่ฉันหลงใหลมากและใช้เวลานานในการพยายามคิดหาระบบการกำหนดเวอร์ชันที่ใช้งานง่าย จากสิ่งที่คุณได้กล่าวไปแล้วในคำถามของคุณเป็นที่ชัดเจนว่าคุณได้เข้าใจประเด็นสำคัญอย่างหนึ่งแล้วหมายเลขเวอร์ชันแอสเซมบลีไม่ตรงกันกับรุ่นผลิตภัณฑ์ หนึ่งคือการขับเคลื่อนทางเทคนิคและอื่น ๆ ถูกขับเคลื่อนโดยธุรกิจ
ต่อไปนี้อนุมานว่าคุณใช้การควบคุมแหล่งที่มาบางรูปแบบและสร้างเซิร์ฟเวอร์ สำหรับบริบทเราใช้TeamCityและ Subversion / Git TeamCity ให้บริการฟรีสำหรับโครงการขนาดเล็กจำนวน 10 โครงการและเป็นเซิร์ฟเวอร์สำหรับสร้างที่ดีมาก แต่มีหลายโครงการซึ่งบางโครงการให้บริการฟรี
หมายเลขเวอร์ชันหมายถึงอะไร
สิ่งที่รุ่นหมายถึงคนคนหนึ่งอาจหมายถึงสิ่งที่แตกต่างจากที่อื่นโครงสร้างทั่วไปเป็นหลักรองมาโครไมโคร วิธีที่ฉันดูหมายเลขเวอร์ชันคือการแบ่งมันออกเป็นสองส่วน ครึ่งแรกจะอธิบายรุ่นหลัก (หลัก) และการอัปเดตที่สำคัญใด ๆ (เล็กน้อย) ครึ่งหลังบ่งบอกว่ามันถูกสร้างขึ้นเมื่อใดและรุ่นของซอร์สโค้ดคืออะไร หมายเลขเวอร์ชันยังหมายถึงสิ่งต่าง ๆ โดยขึ้นอยู่กับบริบทคือ API, Web App และอื่น ๆ
Major
. Minor
. Build
.Revision
Revision
นี่คือตัวเลขที่นำมาจากการควบคุมแหล่งที่มาเพื่อระบุสิ่งที่สร้างขึ้นจริง
Build
นี่เป็นตัวเลขที่เพิ่มมากขึ้นซึ่งสามารถใช้เพื่อค้นหาบิลด์เฉพาะบนบิลด์เซิร์ฟเวอร์ เป็นหมายเลขที่สำคัญเนื่องจากบิลด์เซิร์ฟเวอร์อาจสร้างซอร์สเดียวกันสองครั้งด้วยชุดพารามิเตอร์ที่แตกต่างกัน การใช้หมายเลขบิลด์ประกอบกับหมายเลขแหล่งที่มาช่วยให้คุณระบุสิ่งที่สร้างและวิธีการ
Minor
สิ่งนี้ควรเปลี่ยนเมื่อมีการเปลี่ยนแปลงที่สำคัญในส่วนต่อประสานสาธารณะ ตัวอย่างเช่นหากเป็น API รหัสการบริโภคจะยังคงสามารถรวบรวมได้หรือไม่ หมายเลขนี้ควรถูกรีเซ็ตเป็นศูนย์เมื่อหมายเลขหลักเปลี่ยนไป
Major
ระบุรุ่นของผลิตภัณฑ์ที่คุณใช้ ตัวอย่างเช่น Major ของชุดประกอบ VisualStudio 2008 ทั้งหมดคือ 9 และ VisualStudio 2010 คือ 10
ข้อยกเว้นกฎ
มีข้อยกเว้นสำหรับกฎอยู่เสมอและคุณจะต้องปรับตัวตามที่คุณเจอ วิธีดั้งเดิมของฉันนั้นขึ้นอยู่กับการใช้การโค่นล้ม แต่เมื่อเร็ว ๆ นี้ฉันได้ย้ายไปที่ Git การควบคุมแหล่งที่มาเช่นการโค่นล้มและแหล่งความปลอดภัยที่ใช้ที่เก็บส่วนกลางมีจำนวนที่สามารถใช้เพื่อระบุชุดของแหล่งที่มาเฉพาะจากเวลาที่กำหนด นี่ไม่ใช่กรณีสำหรับการควบคุมแหล่งที่มาแบบกระจายเช่น Git เนื่องจาก Git ใช้ที่เก็บแบบกระจายที่อยู่บนเครื่องพัฒนาแต่ละเครื่องไม่มีหมายเลขการเพิ่มอัตโนมัติที่คุณสามารถใช้ได้มีแฮ็คที่ใช้จำนวนเช็คอิน แต่น่าเกลียด ด้วยเหตุนี้ฉันต้องพัฒนาแนวทางของฉัน
Major
. Minor
. Macro
.Build
หมายเลขการแก้ไขได้หายไปตอนนี้ build ได้เปลี่ยนไปเป็นที่ซึ่งเคยมีการแก้ไขและแทรกมาโครแล้ว คุณสามารถใช้มาโครวิธีที่คุณเห็นว่าเหมาะสม แต่ส่วนใหญ่ฉันจะปล่อยไว้ตามลำพัง เนื่องจากเราใช้ TeamCity ข้อมูลที่หายไปจากหมายเลขการแก้ไขสามารถพบได้ในบิลด์นั่นหมายความว่ามีกระบวนการสองขั้นตอน แต่เราไม่ได้ทำอะไรหายไปและเป็นการประนีประนอมที่ยอมรับได้
สิ่งที่จะตั้ง
สิ่งแรกที่ต้องทำความเข้าใจคือแอสเซมบลี, เวอร์ชันไฟล์และเวอร์ชันผลิตภัณฑ์ไม่จำเป็นต้องตรงกัน ฉันไม่ได้เรียกร้องให้มีชุดตัวเลขที่แตกต่างกัน แต่มันทำให้ชีวิตง่ายขึ้นมากเมื่อทำการเปลี่ยนแปลงเล็กน้อยในแอสเซมบลีที่ไม่ส่งผลกระทบต่อส่วนต่อประสานสาธารณะใด ๆ ที่คุณไม่ได้บังคับให้คอมไพล์ที่ขึ้นต่อกัน วิธีที่ฉันจัดการกับสิ่งนี้คือการตั้งค่าเฉพาะหมายเลข Major และ Minor ใน Assembly Version แต่เพื่อตั้งค่าทั้งหมดใน File Version ตัวอย่างเช่น:
- 1.2.0.0 (AssemblyVersion)
- 1.2.3.4 (FileVersion)
สิ่งนี้ให้ความสามารถแก่คุณในการนำเสนอการแก้ไขด่วนซึ่งจะไม่ทำลายรหัสที่มีอยู่เนื่องจากรุ่นแอสเซมบลีไม่ตรงกัน แต่ให้คุณดูการแก้ไข / สร้างแอสเซมบลีโดยดูที่หมายเลขเวอร์ชันของไฟล์ นี่เป็นวิธีการทั่วไปและสามารถเห็นได้ในแอสเซมบลีโอเพนซอร์สบางอย่างเมื่อคุณดูรายละเอียดแอสเซมบลี
คุณในฐานะหัวหน้าทีมจะต้องรับผิดชอบในการเพิ่มจำนวนรองเมื่อจำเป็นต้องมีการเปลี่ยนแปลง วิธีการหนึ่งในการนำเสนอการเปลี่ยนแปลงที่จำเป็นในอินเทอร์เฟซ แต่ไม่ทำลายรหัสก่อนหน้าคือการทำเครื่องหมายสิ่งที่ล้าสมัยและสร้างอินเทอร์เฟซใหม่ หมายความว่ารหัสที่มีอยู่ถูกเตือนว่าวิธีนี้ล้าสมัยและสามารถลบออกได้ตลอดเวลา แต่ไม่ต้องการให้คุณทำลายทุกอย่างทันที คุณสามารถลบวิธีที่ล้าสมัยเมื่อทุกอย่างได้รับการโยกย้าย
วิธีต่อสายเข้าด้วยกัน
คุณสามารถทำทุกอย่างได้ด้วยตนเอง แต่มันใช้เวลานานมากต่อไปนี้เป็นวิธีที่เราดำเนินการโดยอัตโนมัติ แต่ละขั้นตอนสามารถรันได้
- ลบ
AssemblyVersion
และAssemblyFileVersion
คุณลักษณะจากไฟล์ AssemblyInfo.cs โครงการทั้งหมด
- สร้างไฟล์ข้อมูลประกอบทั่วไป (เรียกว่า VersionInfo.cs) และเพิ่มเป็นรายการที่เชื่อมโยงกับโครงการทั้งหมดของคุณ
- เพิ่ม
AssemblyVersion
และAssemblyFileVersion
แอตทริบิวต์ให้กับเวอร์ชันด้วยค่า "0.0.0.0"
- สร้างโครงการ MsBuild ที่สร้างไฟล์โซลูชันของคุณ
- เพิ่มในงานก่อนบิลด์ที่อัพเดต VersionInfo.cs มีจำนวนไลบรารี MsBuild โอเพนซอร์สที่มีงาน AssemblyInfo ซึ่งสามารถตั้งค่าหมายเลขรุ่นได้ เพียงแค่ตั้งค่าเป็นหมายเลขโดยพลการและทดสอบ
- เพิ่มกลุ่มคุณสมบัติที่มีคุณสมบัติสำหรับแต่ละเซ็กเมนต์ของหมายเลขบิลด์ ที่นี่คุณตั้งหลักและรอง หมายเลขบิลด์และการแก้ไขควรถูกส่งผ่านเป็นอาร์กิวเมนต์
ด้วยการโค่นล้ม:
<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>
หวังว่าฉันจะชัดเจน แต่มีจำนวนมากที่เกี่ยวข้อง กรุณาถามคำถามใด ๆ ฉันจะใช้ความคิดเห็นใด ๆ เพื่อวางโพสต์บล็อกที่กระชับยิ่งขึ้นด้วยกัน