
Υπερχείλιση στοίβας έχει αριθμό έκδοσης ανατροπή στο κάτω μέρος:



> 
> svn αναθεώρηση: 679
> 
> 
> 


Θέλω να χρησιμοποιήσω τέτοια αυτόματη εκδόσεων με μου `.NET Web Site/Application`, τα Windows Forms, έργα WPD / λύσεις.


Πώς μπορώ να εφαρμόσουν αυτό;

 
Πώς μπορώ να συγχρονίσετε τον αριθμό αναθεώρησης SVN με ASP.NET ιστοσελίδα μου;
===============================================================================



Μοιάζει Jeff χρησιμοποιεί [CruiseControl.NET](http://confluence.public.thoughtworks.org/display/CCNET/What+is+CruiseControl.NET) βασίζεται σε κάποια ξεφυλλίζει τις μεταγραφές podcast. Αυτό φαίνεται να είναι αυτοματοποιημένη ανάπτυξη ικανοτήτων από τον έλεγχο πηγή για την παραγωγή. Μήπως αυτό είναι όπου η εισαγωγή συμβαίνει;

 

Μπορείτε να το κάνετε προσθέτοντας τον κωδικό σας τα ακόλουθα οπουδήποτε 



```
$Id:$

```

Έτσι, για παράδειγμα @Jeff έκανε:



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

```

και όταν ελέγχεται το διακομιστή αντικατασταθεί $ Id: $ με τον τρέχοντα αριθμό αναθεώρησης. Επίσης, [βρέθηκε αυτή την αναφορά](http://www.compuphase.com/svnrev.htm) .


Υπάρχει επίσης **$ Ημερομηνία: $** , **$ Rev: $** , **$ Αναθεώρηση: $**

 

`$rev`και άλλες παρόμοιες είναι αναθεωρήσεις για τα μεμονωμένα αρχεία, έτσι δεν θα αλλάξει εκτός αν οι αλλαγές στο αρχείο. Ο αριθμός στην ιστοσελίδα είναι (κατά πάσα πιθανότητα, υποθέτω εδώ) τον αριθμό αναθεώρησης svn για το σύνολο του έργου. Αυτό είναι διαφορετικό από τις αναθεωρήσεις του αρχείου, που άλλοι έχουν δείχνοντας.


Σε αυτή την περίπτωση υποθέτω ότι CCNET τραβά τον αριθμό αναθεώρησης του έργου και ξαναγράφοντας μέρος της ιστοσελίδας με αυτόν τον αριθμό. Οποιαδήποτε λύση CI θα πρέπει να είναι σε θέση να το κάνετε αυτό, που αυτή τη ίδιος με CCNET και Teamcity (αν και όχι ιστοσελίδες, αλλά αυτόματη εκδόσεων των εκδόσεων εγκατάστασης / συναρμολόγησης).


Για να το κάνετε αυτό, χρησιμοποιήστε μια λύση CI που υποστηρίζει, ή να χρησιμοποιήσετε τη διαδικασία κατασκευής σας (MSBuild / Nant) να αποθηκεύσετε τη συγκεκριμένη έκδοση και να το γράψετε στα αρχεία πριν από την «ανάπτυξη» του.

 

Το κάνουμε αυτό με [xUnit.net](http://www.codeplex.com/xunit) για την αυτοματοποιημένη μας χτίζει. Χρησιμοποιούμε `CruiseControl.net`(και δοκιμάζοντας TeamCity). Το έργο MSBuild που τρέχουν για συνεχή ενσωμάτωση αλλάζει αυτόματα τον αριθμό build για εμάς, έτσι ώστε η προκύπτουσα συγκέντρωση αρχείο ZIP περιέχει ένα σωστά εκδόσεων σύνολο των DLLs και EXEs.


Μας [αρχείο MSBuild](http://www.codeplex.com/xunit/SourceControl/FileView.aspx?itemId=115610&changeSetId=20735) περιέχει μια αναφορά UsingTask για ένα αρχείο DLL που κάνει τακτικές αντικαταστάσεις έκφραση: (είστε ευπρόσδεκτοι να χρησιμοποιήσετε αυτό το DLL, όπως καλύπτεται από την άδεια MS-PL επίσης)



```
  <UsingTask
 AssemblyFile = "3rdparty \ CodePlex.MSBuildTasks.dll"
 TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

```

Στη συνέχεια, εξαγάγετε τον αριθμό κατασκευής, το οποίο παρέχεται αυτόματα από το σύστημα CI. Θα μπορούσατε επίσης να πάρετε τον παροχέα έλεγχο η πηγή σας για να σας δώσει τον αριθμό αναθεώρησης πηγή, αν θέλετε, αλλά βρήκαμε την κατασκευή # στο σύστημα CI ήταν πιο χρήσιμο, διότι όχι μόνο μπορεί να δει τα αποτελέσματα ενσωμάτωση με τον αριθμό CI κατασκευή, η οποία παρέχει επίσης ένα σύνδεση πίσω στο changeset (ες) που συμπεριλήφθηκαν στην κατασκευή.



```
 <! - Cascading προσπαθεί να βρει έναν αριθμό build ->

 <PropertyGroup Κατάσταση = " '$ (BuildNumber)' == ''">
 <BuildNumber> $ (BUILD\_NUMBER) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Κατάσταση = " '$ (BuildNumber)' == ''">
 <BuildNumber> $ (ccnetlabel) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Κατάσταση = " '$ (BuildNumber)' == ''">
 <BuildNumber> 0 </ BuildNumber>
 </ PropertyGroup>

```

(Προσπαθούμε BUILD\_NUMBER, η οποία είναι από TeamCity, τότε ccnetlabel, η οποία είναι από CC.net, και αν δεν είναι παρών, εμείς προεπιλογή 0, έτσι ώστε να μπορούμε να ελέγξουμε το αυτοματοποιημένο πρόγραμμα κατασκευής με το χέρι.)


Στη συνέχεια, έχουμε ένα καθήκον που ορίζει τον αριθμό build σε ένα αρχείο GlobalAssemblyInfo.cs που συνδέουν σε όλα τα έργα μας:



```
 <Στόχος Όνομα = "SetVersionNumber">
 <REGEXREPLACE
 Pattern = 'AssemblyVersion \ ( "(\ d + \. \ D + \. \ D +) \. \ D +" \)'
 Αντικατάσταση = 'AssemblyVersion ( "$ 1. $ (BuildNumber)")'
 Αρχεία = 'GlobalAssemblyInfo.cs' />
 <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </ Target>

```

Αυτό βρείτε το χαρακτηριστικό AssemblyVersion, και αντικαθιστά το ABCD αριθμό έκδοσης με abcBuildNumber. Εμείς θα αφήσει συνήθως την πηγή που ελέγχθηκαν στο δέντρο με τα πρώτα τρία μέρη του αριθμού οικοδόμος σταθερό, και το τέταρτο στο μηδέν (fe, σήμερα είναι 1.0.2.0).


Κατά τη διαδικασία κατασκευής σας, βεβαιωθείτε ότι το έργο SetVersionNumber προηγείται έργο κατασκευής σας. Στο τέλος, χρησιμοποιούμε το έργο Zip μας για να συμπιέσετε τα αποτελέσματα κατασκευής έτσι ώστε να έχουμε μια ιστορία από τα εκτελέσιμα για κάθε αυτοματοποιημένη κατασκευή.

 

@Balloon Εάν χρησιμοποιείτε TortoiseSVN, μπορείτε να χρησιμοποιήσετε το συσκευασμένο [SubWCRev](http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html) πρόγραμμα. Είναι ερωτήματα αντίγραφο εργασίας και σας λέει ακριβώς το μεγαλύτερο αριθμό αναθεώρησης. Βεβαίως, αυτό φαίνεται να είναι ένα client-side προσέγγιση σε ένα server-side πρόβλημα, αλλά δεδομένου ότι είναι ένα ωραίο πρόγραμμα γραμμής εντολών, θα πρέπει να είναι σε θέση να συλλάβει την παραγωγή της για τη χρήση αρκετά εύκολα.

 

Για να προσθέσετε @ απάντηση BradWilson του: *«Θα μπορούσατε επίσης να πάρετε τον παροχέα έλεγχο η πηγή σας για να σας δώσει τον αριθμό αναθεώρησης πηγή, αν θέλετε»*


Για να συνδεθείτε Subversion και MSBuild:
 [MSBuild Κοινότητας Εργασίες έργου](http://msbuildtasks.tigris.org/) 

 

Αν χρησιμοποιείτε `ASP.Net MVC`(όπως κάνει StackOverflow), έχω γράψει ένα [εύκολο να ακολουθήσει τον οδηγό 3-βήμα για το πώς να πάρει και να εμφανίσει την τελευταία αναθεώρηση SVN αυτόματα](http://www.fatlemon.co.uk/2008/12/automatic-svn-revision-numbering-in-aspnet-mvc/ "Αυτόματη αρίθμηση αναθεώρηση SVN στο ASP.Net MVC - www.fatlemon.co.uk") . Ο οδηγός είναι εμπνευσμένο από τη σκέψη για τον εαυτό μου σχετικά με αυτό ακριβώς το ζήτημα! : o)

 