2008-09-04 17 views
29

हर बार जब मैं ClickOnce में एप्लिकेशन प्रकाशित करता हूं तो मुझे इसे एक संशोधन संख्या को अपडेट करने के लिए मिलता है। क्या असेंबलीInfo.cs फ़ाइल में संस्करण संख्या को बदलने के लिए स्वचालित रूप से यह परिवर्तन प्राप्त करने का कोई तरीका है (हमारी सभी त्रुटि रिपोर्टिंग असेंबली संस्करण को देखती है)?विधानसभाInfo.cs फ़ाइल संस्करण से मेल खाने के लिए मैं ClickOnce प्रकाशित संस्करण कैसे प्राप्त करूं?

उत्तर

30

हम का उपयोग टीम फाउंडेशन सर्वर टीम निर्माण और TFSBuild.proj के AfterCompile लक्षित करने के लिए एक ब्लॉक को शामिल किया है ClickOnce हमारे पसंदीदा संस्करण संख्या के साथ प्रकाशित गति प्रदान करने के:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj" 
     Properties="PublishDir=$(OutDir)\myProjectPublish\; 
        ApplicationVersion=$(PublishApplicationVersion); 
        Configuration=$(Configuration);Platform=$(Platform)" 
     Targets="Publish" /> 

PublishApplicationVersion चर एक कस्टम MSBuild द्वारा उत्पन्न होता है TFS Changeset संख्या का उपयोग करने का कार्य, लेकिन आप Assembly जानकारी फ़ाइल से संस्करण संख्या प्राप्त करने के लिए your own custom task या existing solution का उपयोग कर सकते हैं।

यह सैद्धांतिक रूप से आपकी प्रोजेक्ट फ़ाइल (जो कि सिर्फ एक एमएसबिल्ड स्क्रिप्ट है) में किया जा सकता है, लेकिन मैं डेवलपर मशीन से तैनाती के खिलाफ अनुशंसा करता हूं।

मुझे यकीन है कि अन्य continuous integration (सीआई) समाधान इसी तरह से संभाल सकते हैं।


संपादित करें: क्षमा करें, पीछे की ओर अपने प्रश्न मिला है। ClickOnce संस्करण संख्या से AssemblyInfo फ़ाइल में जाकर काम करने योग्य होना चाहिए। मुझे यकीन है कि एमएसबिल्ड कम्युनिटी टास्क (उपरोक्त लिंक) में असेंबलीइन्फो फ़ाइल को अपडेट करने का एक कार्य है, इसलिए आपको क्लिकऑन कॉन्फ़िगरेशन एक्सएमएल से संस्करण संख्या खींचने के लिए केवल एक कस्टम कार्य की आवश्यकता होगी।

हालांकि, अगर आप भी अपने त्रुटि रिपोर्टिंग को बदलने शामिल करने के लिए ClickOnce भी संस्करण प्रकाशित विचार कर सकते हैं:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
{ 
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment. 
                 CurrentDeployment.CurrentVersion); 
} 
0

आपको शायद कोड का एक टुकड़ा बनाने की आवश्यकता होगी जो .csproj फ़ाइल में संग्रहीत संस्करण संख्या के अनुसार AssemblyInfo.cs अद्यतन करता है। (क्लिकऑन परिनियोजन संस्करण एक एक्सएमएल टैग के अंदर संग्रहीत किया जाता है।)

प्रकाशित करने के बाद आप इस कोड के कोड को चलाने के लिए अपनी .csproj फ़ाइल बदल देंगे। रिलीज बिल्ड किया जाता है। एमएसबिल्ड लोगों ने ब्लॉग निर्माण के बारे में ब्लॉग किया है कि कुछ निर्माण प्रकारों के दौरान कस्टम क्रियाएं कैसे करें; MSBuild team blog देखें।

2

कदम:

  1. बाहरी incrementing संस्करण संख्या उपयोग करें (आप CruiseControl.NET की तरह एक सतत एकीकरण सर्वर का लाभ उठाने अगर है, तो यह निर्माण लेबल से आता है)।
  2. वर्तमान संस्करण को पकड़ने के लिए GlobalVersionInfo.cs (फ़ाइल समाधान-संदर्भ में सभी परियोजनाओं द्वारा संदर्भित) का उपयोग करें और इसे MSBuild Community कार्यों से AssemblyInfo कार्य के साथ निर्माण पर अपडेट करें।
  3. स्क्रिप्ट Mage उसी संस्करण का उपयोग करके क्लिकऑन मैनिफेस्ट को अपडेट करने के लिए .NET SDK से कमांड लाइन उपकरण (-v और -mv स्विच देखें)।

Btw, एक अच्छी सुविधा है कि, जब भी आप स्वचालित रूप से एक नए ClickOnce तैनाती संस्करण एकीकरण स्क्रिप्ट के माध्यम से, अगर आप भी mage.exe को (संस्करण के रूप में ही) कम से कम संस्करण निर्दिष्ट प्रकाशित करते हैं, तो प्रत्येक उपयोगकर्ता हो जाएगा अगले एप्लिकेशन लॉन्च पर स्वचालित रूप से अपडेट किया गया।

4

मैं इस कार्यान्वित हाल ही में कुछ कस्टम कार्यों का उपयोग कर।क्लिकऑन के साथ इसे लागू करने के साथ मुझे मिली एक समस्या यह है कि आपकी सभी डीएलएल फाइलें अपडेट की गई हैं। यह क्लिकऑन अपडेट को हर अपडेट की सभी एप्लिकेशन फ़ाइलों को डाउनलोड करने का कारण बनता है। यह ClickOnce परिनियोजन की अच्छी विशेषताओं को छोड़ देता है जहां केवल संशोधित फ़ाइलों को अद्यतन में पुनः डाउनलोड किया जाता है।

क्लिकऑन के साथ ऐसा कुछ लागू करने के बारे में सोचने के लिए बस कुछ।