2012-05-07 15 views
5

के लिए वर्तमान बिल्ड नंबर को कैसे पास करें हमारे पास एक Outlook एड-इन है जो क्लिकऑन परिनियोजन का उपयोग कर रहा है।MSBuild के साथ क्लिकऑन परिनियोजन -> एप्लिकेशन संस्करण/या autoincrement

डेवलपर बिल्ड में चेक करने के बाद, पीसी एक बिल्ड कतार देता है और एप्लिकेशन साझा ड्राइव पर किसी स्थान पर प्रकाशित होता है।

समस्या यह है कि बिल्ड प्रकाशित संस्करण को वर्तमान असेंबली संस्करण में नहीं बदलता है और इसलिए यह पिछले संस्करण के फ़ोल्डर में प्रकाशित होता है जिसके परिणामस्वरूप एक दूषित इंस्टॉलर कहता है कि संस्करण स्थापित नहीं किया जा सकता है।

मैंने that article पढ़ा है। और मैंने स्थापित किया [असेंबली: असेंबली वर्जन ("1.0। *")]। अब तक कुछ भी नहीं।

मैंने * .csproj फ़ाइल में <ApplicationVersion></ApplicationVersion> को बढ़ाकर इस समस्या के आसपास काम करने का एक तरीका निकाला। लेकिन मैं इसे स्वचालित होना चाहता हूं।

/target:publish /property:PublishDir="\\sharedDir\\" /property:GenerateManifests=true 
/property:ApplicationVersion=1.0.0.123 

और फिर भी यह स्वचालित नहीं है:

अन्य वैकल्पिक हल जब MSBuild.exe को क्रियान्वित किया गया था। मैं वास्तव में msbuild.exe पर मौजूदा बिल्ड नंबर को पास करना चाहता हूं या प्रत्येक बिल्ड पर वास्तविक बिल्ड नंबर के साथ <ApplicationVersion></ApplicationVersion> में मान को प्रतिस्थापित करना चाहता हूं। क्या कोई और तरीका है?

+0

आप किस बिल्ड सर्वर का उपयोग कर रहे हैं? क्रूज नियंत्रण? जेनकींस/हडसन? TFS? –

+0

बिल्ड सर्वर टीएफएस है। –

+0

मेरे अपने प्रयोग के आधार पर मेरा मानना ​​है कि * .csproj फ़ाइल में मान में वृद्धि करना एक क्लिकऑन एप्लिकेशन को पूरी तरह से स्वचालित बनाने के लिए सही और आसान तरीका है। ऐसा करने से प्रकट होता है कि हवाएं सही हो रही हैं। यदि आप बस एक /t:AplicationVersion=a.b.c.d पास करते हैं तो यह एप्लिकेशन मैनिफेस्ट को सही ढंग से पुन: बना नहीं देता है। बस एक स्ट्रिंग के माध्यम से * .csproj फ़ाइल में उस मान की वृद्धि को स्वचालित करें और उसके बाद MSBuild को/t: ApplicationVersion मान के बिना चलाएं और सब कुछ ठीक होना चाहिए। मैं यह करता हूं और ऑटो अपडेट बहुत अच्छा काम करता है। –

उत्तर

0

मैं Hudson निर्माण सर्वर के रूप में और MSBuild का उपयोग निर्माण करना है। हडसन बिल्ड नंबर के साथ एक पर्यावरण चर सेट करता है। मैं फिर उस पर्यावरण चर को एक प्रोग्राम के लिए कमांड लाइन तर्क के रूप में पास करता हूं जिसे मैंने लिखा है कि assemlyinfo.cs फ़ाइल को पार्स करता है और असेंबली वेरिसन, फ़ाइल संस्करण और असेंबली सूचनात्मक संस्करण अपडेट करता है।

एक वैकल्पिक दृष्टिकोण निष्पादन योग्य के बजाय ऐसा करने के लिए एक कस्टम कार्य बनाना होगा (अब भी आसान है क्योंकि यह अब inline tasks का समर्थन करता है)। TFS के पिछले संस्करण कुछ इसी तरह जहां यह एक वातावरण चर सेट किया था, लेकिन यह TFS 2010 में

यहाँ संसाधनों है कि आप उस के साथ मदद कर सकते हैं बदल गया है हो सकता है:

इसके अलावा, हम ClickOnce आवेदन और तैनाती प्रकट बनाने के लिए Mage कमांड लाइन का उपयोग कर रहे हैं। हम एमएसबिल्ड परियोजना में Exec कार्य के रूप में मेज को कॉल करते हैं।

5

मैं उसी समस्या में भाग रहा था, जिस तरह से मैं यहां आया। मैं आधार के रूप में आपके प्रश्न से कोड का उपयोग कर हल करने में सक्षम था। टीएफएस का उपयोग करके हल करने के लिए यहां दिए गए कदम हैं।

अपना बिल्ड टेम्पलेट खोलें और वर्कफ़्लो के नीचे तर्क टैब खोलें। MSBuildArguments खोजें और डिफ़ॉल्ट मान को संशोधित करें।

// Note: You can use /p for /property and /t for /target 

"/t:Publish /p:PublishDir=<PublishDirectory> /p:ApplicationVersion=" 
    + Date.Today.ToString("yyyy") + "." 
    + Date.Today.ToString("MMdd") + "." 
    + Date.Now.Hour.ToString() + "." 
    + Date.Now.Minute.ToString() 

बेशक अब आप चेक-इन के बचाने के लिए और अपने नए निर्माण फ़ाइल की जरूरत है: नीचे क्या मैं के साथ समाप्त हो गया है। मुझे नए मूल्य का उपयोग करने के लिए अपनी बिल्ड परिभाषा प्राप्त करने में समस्याएं थीं, इसलिए मैंने अभी एक नई बिल्ड परिभाषा बनाई है।

कि जैसा कोई नया ऐप्लिकेशन फ़ोल्डर पैदा करेगा:

<ApplicationName>_2013_0315_09_55 

मैं जानता हूँ कि यह एक पुरानी पोस्ट करने के लिए एक नया जवाब है, तो मुझे यकीन है कि आप एक और समाधान मिल गया है हूँ, लेकिन मुझे आशा है कि यह किसी को भी मदद करता है अन्यथा जो टीएफएस के साथ क्लिकऑन परिनियोजन का उपयोग करना चाहता है।