Wie synchronisiere ich die SVN-Versionsnummer mit meiner ASP.NET-Website?

93

Der Stapelüberlauf hat unten eine Versionsnummer der Subversion:

SVN-Revision: 679

Ich möchte eine solche automatische Versionierung mit meinen .NET Web Site/ApplicationWindows Forms, WPD-Projekten / -Lösungen verwenden.

Wie implementiere ich das?

Zack Peterson
quelle
@Balloon Wenn Sie TortoiseSVN verwenden, können Sie das gepackte SubWCRev- Programm verwenden. Es fragt eine Arbeitskopie ab und gibt nur die höchste Versionsnummer an. Zugegeben, dies scheint ein clientseitiger Ansatz für ein serverseitiges Problem zu sein, aber da es sich um ein nettes Befehlszeilenprogramm handelt, sollten Sie in der Lage sein, die Ausgabe für die Verwendung relativ einfach zu erfassen.
Nickf
Wenn Sie TortoiseSVN nicht für SubWCRev verwenden, wie ich hier sagte , können Sie svnversion verwenden, die dasselbe tut.
Nickf

Antworten:

31

Es sieht so aus, als würde Jeff CruiseControl.NET verwenden, basierend auf einigen Blättern in den Podcast-Transkripten. Dies scheint automatisierte Bereitstellungsfunktionen von der Quellcodeverwaltung bis zur Produktion zu haben. Könnte dies der Ort sein, an dem das Einfügen stattfindet?

saint_groceon
quelle
2
Wenn Sie CruiseControl.Net nicht verwenden, lesen Sie meine Antwort (schamloser Stecker!) - stackoverflow.com/questions/163/… ; o)
Andrew
Link ist kaputt @saint_groceon
Cacho Santa
27

Wir machen das mit xUnit.net für unsere automatisierten Builds. Wir verwenden CruiseControl.net(und probieren TeamCity aus). Die MSBuild-Task, die wir für die kontinuierliche Integration ausführen, ändert automatisch die Build-Nummer für uns, sodass die resultierende Build-ZIP-Datei einen ordnungsgemäß versionierten Satz von DLLs und EXEs enthält.

Unsere MSBuild-Datei enthält eine UsingTask-Referenz für eine DLL, die reguläre Ausdrücke ersetzt: (Sie können diese DLL auch verwenden, da sie auch von der MS-PL-Lizenz abgedeckt wird.)

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

Als nächstes extrahieren wir die Build-Nummer, die vom CI-System automatisch bereitgestellt wird. Sie können Ihren Quellcodeverwaltungsanbieter auch bitten, die Versionsnummer der Quelle anzugeben, wenn Sie möchten. Wir haben jedoch festgestellt, dass die Build-Nummer im CI-System nützlicher ist, da nicht nur die Integrationsergebnisse anhand der CI-Build-Nummer angezeigt werden können, sondern auch eine Link zurück zu den Änderungssätzen, die im Build enthalten waren.

 <! - Kaskadierende Versuche, eine Build-Nummer zu finden ->

 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </ BuildNumber>
 </ PropertyGroup>

(Wir versuchen BUILD_NUMBER, das von TeamCity stammt, und dann ccnetlabel, das von CC.net stammt. Wenn keines von beiden vorhanden ist, setzen wir standardmäßig auf 0, damit wir das automatisierte Build-Skript manuell testen können.)

Als nächstes haben wir eine Aufgabe, die die Build-Nummer in eine GlobalAssemblyInfo.cs-Datei setzt, die wir in alle unsere Projekte verknüpfen:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Pattern = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Replacement = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Files = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </ Target>

Dadurch wird das AssemblyVersion-Attribut gefunden und die abcd-Versionsnummer durch abcBuildNumber ersetzt. Normalerweise lassen wir die Quelle im Baum eingecheckt, wobei die ersten drei Teile der Builder-Nummer festgelegt sind und der vierte Teil bei Null liegt (z. B. heute 1.0.2.0).

Stellen Sie in Ihrem Erstellungsprozess sicher, dass die Aufgabe SetVersionNumber Ihrer Erstellungsaufgabe vorausgeht. Am Ende verwenden wir unsere Zip-Aufgabe, um die Build-Ergebnisse zu komprimieren, sodass wir für jeden automatisierten Build einen Verlauf der Binärdateien haben.

Brad Wilson
quelle
25

Sie können dies tun, indem Sie an einer beliebigen Stelle in Ihrem Code Folgendes hinzufügen

$Id:$

So hat zum Beispiel @Jeff:

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

und beim Einchecken auf dem Server wurde $ Id: $ durch die aktuelle Versionsnummer ersetzt. Ich habe auch diese Referenz gefunden .

Es gibt auch $ Date: $ , $ Rev: $ , $ Revision: $

Nick Berardi
quelle
Sie müssen sicherstellen, dass für die Dateien auch das Attribut svn: keywords Attribut festgelegt ist, andernfalls werden $ Id $ usw. nicht automatisch ersetzt. Siehe diese Seite. (Scrollen Sie nach unten zu svn: keywords)
Michael Stum
1
Ich habe es gerade mit $ Rev $ versucht und es funktioniert - bis zu einem gewissen Grad. Das Problem ist, dass das Schlüsselwort anscheinend nur aktualisiert wird, wenn die Datei, in der es angezeigt wird, geändert wird. Dies bedeutet, dass wenn Änderungen am Projekt vorgenommen werden, die sich nicht auf die Datei mit dem darin enthaltenen $ Rev $ auswirken (in meinem Fall meine ASP.NET-Masterseite), das Projekt eine höhere Revision aufweist, als dem Benutzer angezeigt wird . Hat jemand irgendwelche Gedanken dazu? Gibt es eine Möglichkeit, SVN dazu zu bringen, die Schlüsselwörter in der Datei immer zu aktualisieren?
Chris Roberts
5
Fügen Sie nicht einfach die Versionsnummer der letzten Änderung an dieser bestimmten Datei ein? Ich habe versucht, ein Repository mit zwei Dateien einzurichten und eines zu ändern. Ich habe sowohl den Export als auch das Auschecken versucht, und die andere Datei blieb in beiden Fällen bei 1.
Lasse V. Karlsen
lassevk ist korrekt, dies ändert sich nur, wenn sich die Datei selbst ändert.
Bruno Lopes
Wenn Sie mit VisualSVN und TortoiseSVN $ Id: $ hinzufügen, wird auf der Seite nur "$ Id: $" gerendert. Es kann nützlich sein zu notieren, unter welchem ​​Server / Client diese Antwort funktioniert.
Travis
17

Wenn Sie ASP.Net MVC(wie StackOverflow) verwenden, habe ich eine einfach zu befolgende dreistufige Anleitung zum automatischen Abrufen und Anzeigen der neuesten SVN-Version geschrieben . Der Leitfaden wurde inspiriert, indem ich mir genau diese Frage überlegte! :Ö)

Andrew
quelle
Hört sich toll an, Link ist kaputt!
Peter C
1
Dies war eine großartige Lösung für uns, um die Anzeige einer Versionierung basierend auf unseren SVN-Revisionen zu automatisieren. Ein Vorteil ist, dass kein Anruf bei Ihrem SVN-Server erforderlich ist.
Ben Elder
Link ist defekt oder Website ist ausgefallen
Cacho Santa
1
Danke @cacho, behoben - es war ein Serverfehler; o)
Andrew
10

@Balloon Wenn Sie TortoiseSVN verwenden, können Sie das gepackte SubWCRev- Programm verwenden. Es fragt eine Arbeitskopie ab und gibt nur die höchste Versionsnummer an. Zugegeben, dies scheint ein clientseitiger Ansatz für ein serverseitiges Problem zu sein, aber da es sich um ein nettes Befehlszeilenprogramm handelt, sollten Sie in der Lage sein, die Ausgabe für die Verwendung relativ einfach zu erfassen.

nickf
quelle
9

$revund andere, die es mögen, sind Revisionen für die einzelnen Dateien, sodass sie sich nur ändern, wenn sich die Datei ändert. Die Nummer auf der Webseite ist (wahrscheinlich nehme ich hier an) die SVN-Revisionsnummer für das gesamte Projekt. Das unterscheidet sich von den Dateirevisionen, auf die andere hingewiesen haben.

In diesem Fall gehe ich davon aus, dass CCNET die Versionsnummer des Projekts abruft und einen Teil der Webseite mit dieser Nummer neu schreibt. Jede CI-Lösung sollte dazu in der Lage sein. Richten Sie dies selbst mit CCNET und Teamcity ein (obwohl keine Webseiten, sondern automatische Versionierung von Bereitstellungs- / Assemblyversionen).

Verwenden Sie dazu eine CI-Lösung, die dies unterstützt, oder verwenden Sie Ihren Erstellungsprozess (MSbuild / Nant), um diese Version zu speichern und in die Dateien zu schreiben, bevor Sie sie "bereitstellen".

James Pogran
quelle
5

Um die Antwort von @ BradWilson zu ergänzen: "Sie können auch Ihren Versionsverwaltungsanbieter bitten, die Versionsnummer der Quelle anzugeben, wenn Sie möchten."

So verbinden Sie Subversion und MSBuild: MSBuild Community Tasks Project

jan
quelle