हम अपने स्वचालित बिल्ड के लिए xUnit.net के साथ ऐसा करते हैं । हम उपयोग करते हैं CruiseControl.net
(और टीमसिटी को आज़मा रहे हैं)। MSBuild कार्य जिसे हम निरंतर एकीकरण के लिए चलाते हैं, स्वचालित रूप से हमारे लिए बिल्ड नंबर को बदल देता है, इसलिए परिणामस्वरूप निर्मित ज़िप फ़ाइल में DLL और EXE का ठीक से संस्करण सेट होता है।
हमारी MSBuild फ़ाइल में DLL के लिए एक UseTask संदर्भ है जो नियमित अभिव्यक्ति प्रतिस्थापन करता है: (आप इस DLL का उपयोग करने के लिए स्वागत करते हैं, क्योंकि यह MS-PL लाइसेंस द्वारा कवर किया गया है)
<UsingTask
AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
अगला, हम बिल्ड नंबर निकालते हैं, जो सीआई सिस्टम द्वारा स्वचालित रूप से प्रदान किया जाता है। यदि आप चाहते हैं कि स्रोत संशोधन संख्या प्रदान करने के लिए आप अपना स्रोत नियंत्रण प्रदाता भी प्राप्त कर सकते हैं, लेकिन हमने पाया कि CI सिस्टम में बिल्ड # अधिक उपयोगी था, क्योंकि न केवल सीआई बिल्ड नंबर द्वारा एकीकरण परिणाम देख सकते हैं, बल्कि यह भी एक प्रदान करता है निर्माण में शामिल किए गए बदलाव (एस) के लिए वापस लिंक।
<! - कैस्केडिंग एक बिल्ड नंबर खोजने का प्रयास करता है ->
<प्रॉपर्टीग्रेप कंडीशन = "'$ (बिल्डनंबर)' == ''">
<BuildNumber> $ (BUILD_NUMBER) </ BuildNumber>
</ PropertyGroup>
<प्रॉपर्टीग्रेप कंडीशन = "'$ (बिल्डनंबर)' == ''">
<BuildNumber> $ (ccnetlabel) </ BuildNumber>
</ PropertyGroup>
<प्रॉपर्टीग्रेप कंडीशन = "'$ (बिल्डनंबर)' == ''">
<BuildNumber> 0 </ BuildNumber>
</ PropertyGroup>
(हम BUILD_NUMBER की कोशिश करते हैं, जो TeamCity से है, फिर ccnetlabel, जो CC.net से है, और यदि मौजूद नहीं है, तो हम डिफ़ॉल्ट 0 करते हैं, ताकि हम स्वचालित रूप से निर्मित स्क्रिप्ट का परीक्षण कर सकें।)
अगला, हमारे पास एक कार्य है जो बिल्ड संख्या को GlobalAssemblyInfo.cs फ़ाइल में सेट करता है जिसे हम अपनी सभी परियोजनाओं में लिंक करते हैं:
<लक्ष्य नाम = "SetVersionNumber">
<REGEXREPLACE
पैटर्न = 'AssemblyVersion \ ( "(\ d + \। \ D + \। \ D +) \। \ D +" \)'
रिप्लेसमेंट = 'AssemblyVersion ( "$ 1। $ (BuildNumber)")'
फ़ाइलें = 'GlobalAssemblyInfo.cs' />
<Exec Command = "अट्रिब -r xunit.installer \ App.manifest" />
</ लक्ष्य>
यह असेंबली वर्जन विशेषता को खोजता है, और abcBuildNumber के साथ abcd संस्करण संख्या बदलता है। हम आम तौर पर पेड़ में चेक किए गए स्रोत को बिल्डर नंबर के पहले तीन भागों के साथ छोड़ देंगे, और चौथा शून्य पर (fe, आज यह 1.0.2.0 है)।
अपनी बिल्ड प्रक्रिया में, सुनिश्चित करें कि SetVersionNumber कार्य आपके बिल्ड कार्य से पहले है। अंत में, हम अपने ज़िप कार्य का उपयोग बिल्ड परिणामों को ज़िप करने के लिए करते हैं ताकि हमारे पास प्रत्येक स्वचालित निर्माण के लिए बायनेरिज़ का इतिहास हो।