2009-03-04 17 views
13

में स्वचालित असेंबली संस्करण संख्या प्रबंधन मेरे पास एक असेंबली के साथ सी # में लिखा गया एक वीएस -2008 प्रोजेक्ट है। मैं सभी अलग-अलग असेंबली के बीच संस्करण संख्याओं का प्रबंधन करने का एक आसान तरीका और बिल्ड नंबर को स्वचालित रूप से बढ़ाने के लिए एक तरीका बनाना चाहता हूं और इसे प्रत्येक असेंबली के संस्करण संख्या में सहेजा गया है।वीएस -2008

मुझे लगता है कि यह ज्यादातर परियोजनाओं के साथ एक समस्या है इसलिए संभवतः इसे हल किया गया है?

मेरे प्रोजेक्ट के संस्करण संसाधनों के प्रबंधन को सरल बनाने के लिए कोई सुझाव?

उत्तर

17

मैं समाधान स्तर है कि समाधान जो निम्नलिखित लाइनों में शामिल सभी परियोजनाओं से जुड़ा हुआ है पर एक .cs फ़ाइल का उपयोग ।

+0

यह वीबी पर काम करने जैसा नहीं दिखता है या यह VS.NET के लिए एक्सप्रेस संस्करण की वजह से है? एक महान चाल की तरह लग रहा है। –

+0

आपको भी एक उपयोग जोड़ने की जरूरत है। मैं अपना जवाब दूंगा। –

+2

आपका मतलब है "असेंबलीफाइलवर्सन" विशेषता को हटा देना, है ना? – Alexander

0

आप ऐसा करने के लिए एक कस्टम एमएसबिल्ड कार्य लिख सकते हैं। this approach

10

एक फ़ाइल को समाधान में रखें, इसे "SolutionInfo.cs" पर कॉल करें (मुझे लगता है कि सी #, वीबी में भी काम करेगा)। इस में आपके पास समान सभी गुण हैं। AssemblyVersionAttribute के साथ शुरू करें।

फिर प्रत्येक प्रोजेक्ट में लिंक प्रत्येक प्रोजेक्ट में मौजूदा आइटम जोड़ने का चयन करके, लेकिन जोड़ने पर क्लिक करने के बजाय, लिंक के रूप में जोड़ने के लिए ड्रॉप डाउन का उपयोग करें।

using System.Reflection; 
[assembly : AssemblyVersion("1.2.3.*")] 

और अपनी परियोजना में AssemblyInfo फ़ाइल से AssemblyFileVersion विशेषता निकालने का ध्यान रखें:

0

आप अपने AssemblyInfo.cs में तारक चिन्ह का उपयोग कर सकते हैं:

// Version information 
[assembly: AssemblyVersion("1.0.*")] 

यह अपने versionnumbers स्वचालित रूप से वृद्धि होगी। सभी असेंबली के बीच एक नंबर साझा करने के लिए ... मुझे यकीन नहीं है, लेकिन हो सकता है कि आप साझा फ़ाइल में उल्लिखित विशेषता का उपयोग करें।

3

हमारे पास अन्य उत्तरों की तरह समाधान स्तर पर एक एकल AssemblyInfoGlobal.cs फ़ाइल है। फिर हमारे पास हमारी बिल्ड स्क्रिप्ट का एक छोटा सा एप्लीकेशन है जो CCNetLabel लेता है जो CruiseControl.net परिभाषित करता है (और लेबल्स जेनरेट करने के लिए डिफ़ॉल्ट लेबलर का उपयोग करके) और वैश्विक फ़ाइल को चेकआउट करें, संस्करण संख्या संशोधित करें, और फिर वैश्विक फ़ाइल को वापस जांचें

हमारी कुछ परियोजनाओं में कई समाधान हैं, इसलिए वैश्विक फ़ाइल निर्देशिका संरचना में समाधान स्तर से ऊपर बैठती है, इतना अधिक है कि जो कुछ भी इसकी आवश्यकता है, वह नीचे है।

हम तब भी तैनाती परियोजनाओं के संस्करण संख्याओं को अद्यतन करते हैं - इनके लिए संख्या VDProj फ़ाइल में पाई जाती है, लेकिन मुझे यकीन नहीं है कि आप इन्हें एक्सप्रेस संस्करणों में पाएंगे - मुझे लगता है कि यह एक पूर्ण पेशेवर ऊपर की सुविधा है। और कुछ परियोजनाओं में एक दर्जन परिनियोजन परियोजनाएं होती हैं, लेकिन VDPROJ फ़ाइल से संस्करण संख्या को बाहरी करने का कोई आसान तरीका नहीं है। (या वहाँ है?)

फिर निर्माण होता है जिसका मतलब है कि निर्माण के सभी आउटपुट में वही संस्करण संख्या है, किसी भी समय हम एमएसआई या असेंबली से संस्करण प्राप्त कर सकते हैं और हम जानते हैं कि वास्तव में कौन सा स्रोत था उस आउटपुट को बनाने के लिए इस्तेमाल किया जाता है।

+0

हम टीमसिटी और एमएसबिल्ड समुदाय कार्यों का उपयोग करके भी ऐसा करते हैं। संख्या को बढ़ाने के बजाय, जो हम करते हैं, हमने संस्करण संशोधन को स्रोत नियंत्रण परिवर्तन संख्या में भी सेट किया है। इससे हमें सटीक स्रोत संशोधन के लिए हर बाइनरी आर्टिफैक्ट को ट्रैक करने की अनुमति मिलती है। – Todd

0

मैंने इस तरह कुछ करने के लिए svnversion MSBuild community tasks का उपयोग किया है, मैंने निर्देशों का पालन किया here हालांकि मैं जिस तरह से करता हूं वह कई असेंबली नहीं करता है।

1

using System.Reflection; [assembly : AssemblyVersion("1.2.3.*")]

बस इस पर एक टिप्पणी, स्वत: जनरेट की संस्करण संख्या चक्र। तो यदि आप संस्करण में सक्षम होने की तलाश में हैं, तो कल एक बिल्ड में संस्करण 1.2.3.X है जहां एक्स < एक्स आज एक बिल्ड है तो यह जाने का कोई तरीका नहीं है।

इस प्रयोग

[assembly : AssemblyVersion("1.2.*")] 

इस संस्करण 1.2.X.Y आप मिल जाएगा जहां X.Y के संयोजन बड़ा आज की तुलना में यह कल है प्राप्त करने के लिए। मैं अनुमान लगा रहा हूं कि एक्स.ए. क्रमशः दिनांक और समय का एक कार्य है

संबंधित मुद्दे