Stack Overflow มีหมายเลขเวอร์ชันการโค่นล้มที่ด้านล่าง:
การแก้ไข svn: 679
ฉันต้องการใช้การกำหนดเวอร์ชันอัตโนมัติดังกล่าวกับ.NET Web Site/Application
Windows Forms, WPD projects / solutions ของฉัน
ฉันจะใช้สิ่งนี้ได้อย่างไร
Stack Overflow มีหมายเลขเวอร์ชันการโค่นล้มที่ด้านล่าง:
การแก้ไข svn: 679
ฉันต้องการใช้การกำหนดเวอร์ชันอัตโนมัติดังกล่าวกับ.NET Web Site/Application
Windows Forms, WPD projects / solutions ของฉัน
ฉันจะใช้สิ่งนี้ได้อย่างไร
คำตอบ:
ดูเหมือนว่าเจฟฟ์กำลังใช้CruiseControl.NETโดยอาศัยข้อมูลบางส่วนผ่านการถอดเสียงพอดคาสต์ ดูเหมือนว่าจะมีความสามารถในการปรับใช้โดยอัตโนมัติตั้งแต่การควบคุมต้นทางจนถึงการผลิต นี่อาจเป็นจุดที่เกิดการแทรกหรือไม่?
เราดำเนินการกับxUnit.netสำหรับงานสร้างอัตโนมัติของเรา เราใช้CruiseControl.net
(และกำลังทดลองใช้ TeamCity) งาน MSBuild ที่เราเรียกใช้สำหรับการรวมอย่างต่อเนื่องจะเปลี่ยนหมายเลขบิลด์ให้เราโดยอัตโนมัติดังนั้นไฟล์ ZIP ของบิลด์ที่ได้จะมีชุดของ DLL และ EXE ที่มีเวอร์ชันที่ถูกต้อง
ไฟล์ MSBuildของเรามีการอ้างอิง UsingTask สำหรับ DLL ซึ่งทำการแทนที่นิพจน์ทั่วไป: (คุณสามารถใช้ DLL นี้ได้เนื่องจากครอบคลุมโดยใบอนุญาต MS-PL เช่นกัน)
<การใช้งาน AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
ต่อไปเราจะแยกหมายเลขบิลด์ซึ่งระบบ CI ให้มาโดยอัตโนมัติ นอกจากนี้คุณยังสามารถขอให้ผู้ให้บริการควบคุมแหล่งที่มาเพื่อระบุหมายเลขการแก้ไขซอร์สได้หากคุณต้องการ แต่เราพบว่า build # ในระบบ CI มีประโยชน์มากกว่าเพราะไม่เพียง แต่สามารถดูผลลัพธ์การรวมตามหมายเลขบิลด์ CI เท่านั้น แต่ยังมี เชื่อมโยงกลับไปยังชุดการเปลี่ยนแปลงที่รวมอยู่ในบิลด์
<! - เรียงซ้อนพยายามหาหมายเลขบิลด์ -> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (BUILD_NUMBER) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (ccnetlabel) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> 0 </BuildNumber> </PropertyGroup>
(เราลอง BUILD_NUMBER ซึ่งมาจาก TeamCity ตามด้วย ccnetlabel ซึ่งมาจาก CC.net และหากไม่มีอยู่เราจะตั้งค่าเริ่มต้นเป็น 0 เพื่อให้เราสามารถทดสอบสคริปต์การสร้างอัตโนมัติได้ด้วยตนเอง)
ต่อไปเรามีภารกิจที่กำหนดหมายเลขบิลด์ลงในไฟล์ GlobalAssemblyInfo.cs ที่เราเชื่อมโยงไปยังโครงการทั้งหมดของเรา:
<Target Name = "SetVersionNumber"> <RegexReplace รูปแบบ = 'AssemblyVersion \ ("(\ d + \. \ d + \. \ d +) \. \ d +" \)' การแทนที่ = 'AssemblyVersion ("$ 1. $ (BuildNumber)")' ไฟล์ = 'GlobalAssemblyInfo.cs' /> <Exec Command = "attrib -r xunit.installer \ App.manifest" /> </Target>
สิ่งนี้ค้นหาแอตทริบิวต์ AssemblyVersion และแทนที่หมายเลขเวอร์ชัน abcd ด้วย abcBuildNumber โดยปกติเราจะปล่อยให้แหล่งที่มาตรวจสอบในแผนภูมิโดยให้สามส่วนแรกของหมายเลขตัวสร้างคงที่และที่สี่เป็นศูนย์ (fe วันนี้คือ 1.0.2.0)
ในขั้นตอนการสร้างของคุณตรวจสอบให้แน่ใจว่างาน SetVersionNumber อยู่ก่อนงานสร้าง ในตอนท้ายเราใช้งาน Zip ของเราเพื่อบีบอัดผลลัพธ์ของบิลด์เพื่อให้เรามีประวัติของไบนารีสำหรับทุกบิลด์อัตโนมัติ
คุณสามารถทำได้โดยเพิ่มสิ่งต่อไปนี้ที่ใดก็ได้ในโค้ดของคุณ
$Id:$
ตัวอย่างเช่น @Jeff ทำ:
<div id="svnrevision">svn revision: $Id:$</div>
และเมื่อตรวจสอบในเซิร์ฟเวอร์แทนที่ $ Id: $ ด้วยหมายเลขการแก้ไขปัจจุบัน ฉันยังพบข้อมูลอ้างอิงนี้
นอกจากนี้ยังมี$ Date: $ , $ Rev: $ , $ Revision: $
หากคุณกำลังใช้ASP.Net MVC
(ตาม StackOverflow ไม่) ผมเคยเขียนเรื่องง่ายที่จะทำตามคำแนะนำ 3 ขั้นตอนเกี่ยวกับวิธีการที่จะได้รับโดยอัตโนมัติและแสดงการแก้ไข ไกด์ได้รับแรงบันดาลใจจากการคิดกับตัวเองเกี่ยวกับคำถามนี้! : o)
$rev
และอื่น ๆ เช่นเป็นการแก้ไขสำหรับแต่ละไฟล์ดังนั้นจึงไม่เปลี่ยนแปลงเว้นแต่ไฟล์จะเปลี่ยนไป หมายเลขบนหน้าเว็บคือ (เป็นไปได้มากว่าฉันจะสมมติที่นี่) หมายเลขแก้ไข svn สำหรับทั้งโครงการ ซึ่งแตกต่างจากการแก้ไขไฟล์ที่คนอื่นชี้ไป
ในกรณีนี้ฉันคิดว่า CCNET กำลังดึงหมายเลขการแก้ไขของโครงการและเขียนส่วนหนึ่งของหน้าเว็บด้วยหมายเลขนั้น โซลูชัน CI ใด ๆ ควรจะทำได้ตั้งค่าด้วยตัวเองด้วย CCNET และ Teamcity (แม้ว่าจะไม่ใช่หน้าเว็บ แต่เป็นการกำหนดเวอร์ชันการปรับใช้ / แอสเซมบลีโดยอัตโนมัติ)
ในการดำเนินการนี้ให้ใช้โซลูชัน CI ที่สนับสนุนหรือใช้กระบวนการสร้าง (MSbuild / Nant) ของคุณเพื่อจัดเก็บเวอร์ชันนั้นและเขียนลงในไฟล์ก่อนที่จะ "ปรับใช้"
หากต้องการเพิ่มคำตอบของ @ BradWilson: "คุณสามารถขอให้ผู้ให้บริการควบคุมแหล่งที่มาเพื่อระบุหมายเลขการแก้ไขแหล่งที่มาได้หากต้องการ"
เพื่อเชื่อมต่อ Subversion และ MSBuild: MSBuild Community Tasks Project