के साथ असेंबली संस्करण संख्याओं को संरेखित करना मुझे आश्चर्य है कि BuildNumberOverrideTarget का उपयोग किए बिना बिल्ड नंबर (20080213.1) को सिंक्रनाइज़ करने का कोई तरीका है, जहां मुझे अपना खुद का निर्माण नंबर बनाना होगा? मैं मूल रूप से डिफ़ॉल्ट/अंतर्निर्मित tfs buildnumber जनरेटर का उपयोग करना चाहता हूं लेकिन इसके साथ अपने असेंबली संस्करणों को संरेखित करने के लिए इसे एक्सेस करना चाहता हूं। क्या यह किया जा सकता है और क्या यह इस तरह से करने का एक समझदार तरीका है?TFS Buildnumber
उत्तर
हाँ आप कर सकते हैं। किसी बिंदु पर, संभवतः आफ्टरगेट पर, आप BuildNumber का उपयोग कर सकते हैं और अपने स्रोत कोड में AssemblyInfo.cs फ़ाइलों को अपडेट करने के लिए एक कस्टम कार्य बना सकते हैं।
हम AfterGet में झुका और वजह से हमारे लक्ष्य निर्भर होना है:
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
चेक:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
हमारे VersionAssemblies लक्ष्य $ से AssemblyInfo.cs फ़ाइलें (SolutionRoot) के सभी खींचती उन्हें बाहर:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
उन्हें संपादित करता है और फ़ाइल संस्करण को $ (Buil के साथ बदल देता है dNumber): फ़ाइल संस्करणों मैं File.Replace कार्य है कि CodePlex पर माइक्रोसॉफ्ट SDC tasks के साथ आता है का उपयोग के प्रतिस्थापन के लिए
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
:
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
और फिर वापस फ़ाइलों की जाँच करता है।
यह भी ध्यान दें कि यदि आपके पास कोई बिल्ड है जो चेकइन पर ट्रिगर किया गया है, तो AssemblyInfo.cs फ़ाइलों में जांच करते समय, सुनिश्चित करें कि टिप्पणी में $ (NoCICheckinComment) शामिल है क्योंकि इससे TFS किसी अन्य निर्माण को ट्रिगर नहीं करता है अन्यथा आप ' एक अनंत निर्माण पाश में खत्म हो जाएगा।
जो आप पूछ रहे हैं वह बहुत समझदार है और इसे प्राप्त करने के कई तरीके हैं।
व्यक्तिगत रूप से, जब मैं यह कर रहा संस्करण नियंत्रण है कि बिल्ड सर्वर उन में संख्या उत्पन्न करने के लिए फ़ाइलों की जाँच करना पसंद नहीं है - यह सिर्फ जब शाखाओं के बीच कोड विलय भी कई सिर दर्द का परिचय लेकिन यह भी मुझे पसंद है एक ज्ञात संस्करण संख्या का उपयोग किया जाना चाहिए जब कोई डेवलपर वर्कस्टेशन बिल्ड करता है, जो एक उचित बिल्ड सर्वर व्युत्पन्न असेंबली बनाम बनाता है जिससे कि उन्हें अलग-अलग बताएं।
मैं इसे कैसे करना पसंद परअधिक जानकारी के लिए TFS बनाएँ recipies विकि पर एक नज़र डालें:
या विषय
-
पर अपने ब्लॉग पोस्ट
- Martin Woodward: Aligning Build Numbers with Assembly Versions
उम्मीद है कि मदद करता है,
मार्टिन।
मार्टिन धन्यवाद। मैं पहले से ही आपके उत्कृष्ट पद पर संरेखण पर आया था और उस विधि का उपयोग किया है। जब आप कहते हैं कि डेवलपर बिल्ड पर उपयोग किए जाने वाले ज्ञात संस्करण संख्या की तरह आपका मतलब है कि वे असेंबली जानकारी फ़ाइल से किसी भी ओवरराइड के बिना होंगे? 1.0.0.0 कहो? – Fadeproof
डेवलपर्स के लिए आप केवल वीएस बिल्ड का उपयोग करते हैं या आप बिल्ड स्क्रिप्ट का उपयोग करते हैं जिन्हें डेवलपर्स को अपने वर्कस्टेशन पर उपयोग करना चाहिए? – Fadeproof
डेवलपर्स के लिए मैं केवल वीएस बिल्ड का उपयोग करता हूं। मैं कभी-कभी टीमबिल्ड स्क्रिप्ट का उपयोग करके डेवलपर वर्कस्टेशन बिल्ड का उपयोग करता हूं - हालांकि वीएस बिल्ड समय के 90% नौकरी करने में सक्षम होते हैं और चीजों को अधिक सरल बनाते हैं। आपकी पिछली टिप्पणी के जवाब में, मैं वास्तव में AssemblyInfo फ़ाइलों में 1.0.0.0 का उपयोग करता हूं। –
आप $ (BuildNumber) से निर्माण और संशोधन कैसे खींचते हैं क्योंकि यह "MyBuildDefinition_20090213.1" प्रारूप के डिफ़ॉल्ट रूप से है? – Fadeproof
आप MyBuildDefinition_ भाग को बाहर निकालने और इसे बाहर निकालने के लिए एक कस्टम कार्य लिख सकते हैं। –