मैं अपने ASP.NET वेब साइट के साथ SVN संशोधन संख्या को कैसे सिंक करूं?


93

स्टैक ओवरफ्लो में नीचे की तरफ एक तोड़फोड़ संस्करण संख्या है:

svn संशोधन: 679

मैं अपने .NET Web Site/Application, विंडोज फॉर्म, डब्ल्यूपीडी परियोजनाओं / समाधानों के साथ इस तरह के स्वचालित संस्करण का उपयोग करना चाहता हूं ।

मैं इसे कैसे क्रियान्वित करूं?


@ बैलून यदि आप कछुआ एसवीएन का उपयोग कर रहे हैं, तो आप पैकेज्ड सबवक्रिव प्रोग्राम का उपयोग कर सकते हैं । यह एक काम करने वाली कॉपी पर सवाल उठाता है और आपको केवल उच्चतम संशोधन संख्या बताता है। बेशक, यह एक सर्वर-साइड समस्या के लिए क्लाइंट-साइड दृष्टिकोण प्रतीत होता है, लेकिन चूंकि यह एक अच्छा कमांड लाइन प्रोग्राम है, इसलिए आपको इसके आउटपुट को आसानी से उपयोग करने के लिए कैप्चर करने में सक्षम होना चाहिए।
19

यदि आप SubWCRev के लिए TortoiseSVN का उपयोग नहीं कर रहे हैं जैसे कि मैंने यहां कहा , तो आप svnversion का उपयोग कर सकते हैं जो समान काम करता है।
निक

जवाबों:


31

ऐसा लगता है कि जेफ , पॉडकास्ट ट्रांस्क्रिप्शंस के माध्यम से कुछ पत्तियों के आधार पर क्रूज़कॉन्ट्रोल.नेट का उपयोग कर रहा है । ऐसा लगता है कि स्रोत नियंत्रण से लेकर उत्पादन तक में स्वचालित तैनाती क्षमताएँ हैं। यह वह जगह हो सकती है जहां सम्मिलन हो रहा है?


2
यदि आप CruiseControl.Net का उपयोग नहीं कर रहे हैं, तो मेरे उत्तर की जाँच करें (बेशर्म प्लग!) - stackoverflow.com/questions/163/… ; ओ)
एंड्रयू

लिंक टूटा है @saint_groceon
Cacho Santa

27

हम अपने स्वचालित बिल्ड के लिए 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 कार्य आपके बिल्ड कार्य से पहले है। अंत में, हम अपने ज़िप कार्य का उपयोग बिल्ड परिणामों को ज़िप करने के लिए करते हैं ताकि हमारे पास प्रत्येक स्वचालित निर्माण के लिए बायनेरिज़ का इतिहास हो।


25

आप इसे अपने कोड में कहीं भी जोड़कर कर सकते हैं

$Id:$

उदाहरण के लिए @ जेफ़ ने किया:

<div id="svnrevision">svn revision: $Id:$</div>

और जब सर्वर में जांच की गई तो $ Id: $ को वर्तमान संशोधन संख्या के साथ बदल दिया गया। मुझे यह संदर्भ भी मिला

$ Date भी है : $ , $ Rev: $ , $ संशोधन: $


आपको यह सुनिश्चित करने की आवश्यकता है कि फाइलें svn: कीवर्ड के रूप में अच्छी तरह से सेट की गई हों, अन्यथा $ Id $ आदि स्वतः-प्रतिस्थापित नहीं हैं। इस पेज को देखें : (कीवर्ड्स SVN करने के लिए नीचे स्क्रॉल)
माइकल Stum

1
मैंने अभी $ रे $ का उपयोग करके यह कोशिश की है और यह एक हद तक काम करता है। समस्या यह है कि यह केवल उस कीवर्ड को अपडेट करने के लिए प्रकट होता है जब यह दिखाई देने वाली फ़ाइल को बदल दिया जाता है। इसका मतलब यह है कि अगर उस परियोजना में परिवर्तन किए जाते हैं जो फ़ाइल को $ रेव $ के साथ प्रभावित नहीं करती है (मेरे मामले में, मेरे ASP.NET मास्टर पेज पर), तो परियोजना में उपयोगकर्ता को प्रदर्शित होने की तुलना में अधिक संशोधन होगा। । क्या इस पर किसी का कोई विचार है? क्या फ़ाइल में कीवर्ड को हमेशा अपडेट करने के लिए SVN पाने का कोई तरीका है ?
क्रिस रॉबर्ट्स

5
क्या यह केवल उस विशेष फ़ाइल में अंतिम परिवर्तन की संशोधन संख्या सम्मिलित नहीं करेगा? मैंने एक दो-फ़ाइल रिपॉजिटरी स्थापित करने की कोशिश की और एक को बदल दिया, और निर्यात और चेकआउट दोनों की कोशिश की, और दूसरी फाइल दोनों मामलों में 1 पर रही।
लास वी। कार्लसन

लेस्सेवेक सही है, यह केवल तब बदलता है जब फ़ाइल खुद बदलती है।
ब्रूनो लोप्स

VisualSVN और TortoiseSVN का उपयोग करना, $ Id जोड़ना: $ के कारण पृष्ठ "$ Id: $" को रेंडर करता है। यह नोट करना उपयोगी हो सकता है कि यह उत्तर किस सर्वर / क्लाइंट के तहत काम करता है।
ट्रैविस

17

यदि आप उपयोग कर रहे हैं ASP.Net MVC(जैसा कि StackOverflow करता है), तो मैंने स्वचालित रूप से नवीनतम SVN संशोधन को प्राप्त करने और प्रदर्शित करने के लिए 3-स्टेप गाइड का पालन करने के लिए एक आसान लिखा है । यह बहुत ही सवाल के बारे में सोचकर गाइड खुद से प्रेरित था! : ओ)


बहुत अच्छा लगता है, लिंक हालांकि टूट गया!
पीटर सी

1
यह हमारे एसवीएन संशोधनों के आधार पर एक संस्करण प्रदर्शित करने को स्वचालित करने के लिए हमारे लिए एक महान समाधान था। एक लाभ यह है कि इसे आपके SVN सर्वर पर कॉल की आवश्यकता नहीं है।
बेन एल्डर

लिंक टूट गया है, या साइट नीचे है
काचो सांता

1
धन्यवाद @ काचो, तय - यह एक सर्वर दोष था [sic]; ओ)
एंड्रयू

10

@ बैलून यदि आप कछुआ एसवीएन का उपयोग कर रहे हैं, तो आप पैकेज्ड सबवक्रिव प्रोग्राम का उपयोग कर सकते हैं । यह एक काम करने वाली कॉपी पर सवाल उठाता है और आपको केवल उच्चतम संशोधन संख्या बताता है। बेशक, यह एक सर्वर-साइड समस्या के लिए क्लाइंट-साइड दृष्टिकोण प्रतीत होता है, लेकिन चूंकि यह एक अच्छा कमांड लाइन प्रोग्राम है, इसलिए आपको इसके आउटपुट को आसानी से उपयोग करने के लिए कैप्चर करने में सक्षम होना चाहिए।


9

$revऔर अन्य लोग इसे अलग-अलग फाइलों के लिए संशोधन कहते हैं, इसलिए जब तक फाइल नहीं बदलेगी, वे नहीं बदलेंगे। वेबपेज पर संख्या (सबसे अधिक संभावना है, मैं यहां मान रहा हूं) पूरे प्रोजेक्ट के लिए svn संशोधन संख्या। यह फ़ाइल संशोधन से भिन्न है, जिसे अन्य इंगित कर रहे हैं।

इस मामले में मैं मानता हूं कि CCNET परियोजना की संशोधन संख्या को खींच रहा है और उस संख्या के साथ वेबपृष्ठ के एक हिस्से को फिर से लिख रहा है। कोई भी सीआई समाधान ऐसा करने में सक्षम होना चाहिए, इसे अपने आप को CCNET और टीमसिटी के साथ सेट करें (हालांकि वेबपेज नहीं, लेकिन परिनियोजन / असेंबली संस्करणों के स्वचालित संस्करण)।

ऐसा करने के लिए, एक CI समाधान का उपयोग करें जो इसका समर्थन करता है, या उस संस्करण को संग्रहीत करने के लिए अपनी निर्माण प्रक्रिया (MSbuild / Nant) का उपयोग करें और इसे "तैनात" करने से पहले इसे फ़ाइलों में लिखें।


5

@ ब्रैडविलसन के उत्तर में जोड़ने के लिए: "यदि आप चाहें तो स्रोत संशोधन संख्या प्रदान करने के लिए आप अपने स्रोत नियंत्रण प्रदाता को भी प्राप्त कर सकते हैं"

तोड़फोड़ और MSBuild कनेक्ट करने के लिए: MSBuild सामुदायिक कार्य परियोजना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.