.net - sharpsvn source code download




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

Stack Overflow hat unten eine Subversion-Versionsnummer:

SVN Revision: 679

Ich möchte eine solche automatische Versionierung für meine .NET Web Site/Application , Windows Forms, WPD-Projekte / -Lösungen verwenden.

Wie setze ich das um?


@Balloon Wenn Sie TortoiseSVN verwenden, können Sie das SubWCRev Programm SubWCRev . 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.


Dies machen wir mit xUnit.net für unsere automatisierten Builds. Wir benutzen 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 ZIP-Build-Datei einen ordnungsgemäß versionierten Satz von DLLs und EXE-Dateien 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 gerne 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önnten auch Ihren Versionsverwaltungsanbieter auffordern, die Versionsversionsnummer anzugeben, wenn Sie dies möchten. Wir fanden jedoch, dass die Build-Nr. Im CI-System nützlicher ist, da nicht nur die Integrationsergebnisse anhand der CI-Build-Nummer angezeigt werden, sondern auch eine Verknüpfen Sie zurück zu den Änderungssätzen, die im Build enthalten waren.

 <!-- Cascading attempts to find a build number -->

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

(Wir versuchen es mit BUILD_NUMBER aus TeamCity und dann mit ccnetlabel aus CC.net. Wenn keines von beiden vorhanden ist, wird standardmäßig 0 verwendet, damit wir das automatisierte Erstellungsskript 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 verlinken:

 <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>

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

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


Hinzufügen zu @ BradWilsons Antwort: "Sie können auch Ihren Versionsverwaltungsanbieter bitten, die Versionsnummer anzugeben, wenn Sie möchten."

So verbinden Sie Subversion und MSBuild: MSBuild Community Tasks Project


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

$Id:$

Also zum Beispiel hat @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: $


$rev und ähnliche Dateien sind Revisionen für die einzelnen Dateien. Sie werden also erst geändert, 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 verwiesen haben.

In diesem Fall gehe ich davon aus, dass CCNET die Revisionsnummer des Projekts abruft und einen Teil der Webseite mit dieser Nummer neu schreibt. Jede CI-Lösung sollte in der Lage sein, dies selbst mit CCNET und Teamcity einzurichten (obwohl dies keine Webseiten sind, sondern die automatische Versionierung von Deployment- / Assembly-Versionen).

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





versioning