Frage

Stack Overflow hat unten eine Subversion-Versionsnummer:

SVN-Revision:679

Ich möchte eine solche automatische Versionierung mit meinem verwenden .NET Web Site/Application, Windows Forms, WPD-Projekte/-Lösungen.

Wie setze ich das um?

War es hilfreich?

Lösung

Sieht so aus, als ob Jeff es benutzt CruiseControl.NET basierend auf etwas Durchblättern der Podcast-Transkripte.Dies scheint über automatisierte Bereitstellungsfunktionen von der Quellcodeverwaltung bis zur Produktion zu verfügen.Könnte das der Ort sein, an dem die Einfügung stattfindet?

Andere Tipps

Wir machen das mit xUnit.net für unsere automatisierten Builds.Wir gebrauchen CruiseControl.net (und probieren TeamCity aus).Die MSBuild-Aufgabe, 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 EXE-Dateien enthält.

Unser 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 ebenfalls durch die MS-PL-Lizenz abgedeckt ist)

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

Als nächstes extrahieren wir die Build-Nummer, die automatisch vom CI-System bereitgestellt wird.Wenn Sie möchten, können Sie auch Ihren Quellcodeverwaltungsanbieter bitten, die Quellrevisionsnummer bereitzustellen. Wir fanden jedoch, 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.

 <!-- 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 BUILD_NUMBER, das von TeamCity stammt, dann ccnetlabel, das von CC.net stammt, und wenn keines von beiden vorhanden ist, verwenden wir standardmäßig 0, damit wir das automatisierte Build-Skript manuell testen können.)

Als nächstes haben wir eine Aufgabe, die die Build-Nummer in einer GlobalAssemblyInfo.cs-Datei festlegt, 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 a.b.c.d-Versionsnummer durch a.b.c.BuildNumber ersetzt.Normalerweise lassen wir die Quelle im Baum eingecheckt, wobei die ersten drei Teile der Builder-Nummer festgelegt sind und der vierte auf Null steht (z. B. heute 1.0.2.0).

Stellen Sie in Ihrem Build-Prozess sicher, dass die SetVersionNumber-Aufgabe vor Ihrer Build-Aufgabe steht.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.

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

$Id:$

So hat zum Beispiel @Jeff Folgendes getan:

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

und beim Einchecken ersetzte der Server $Id:$ durch die aktuelle Revisionsnummer.ich auch habe diesen Hinweis gefunden.

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

Wenn Sie verwenden ASP.Net MVC (wie es StackOverflow tut), habe ich eine geschrieben Einfach zu befolgende 3-Schritte-Anleitung zum automatischen Abrufen und Anzeigen der neuesten SVN-Revision.Der Ratgeber wurde inspiriert, indem ich mir genau diese Frage stellte!:Ö)

@Balloon Wenn Sie Tortoisesvn verwenden, können Sie die Verpackung verwenden SubWCRev Programm.Es fragt eine Arbeitskopie ab und teilt Ihnen nur die höchste Revisionsnummer mit.Zugegebenermaßen scheint dies 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, dessen Ausgabe relativ einfach zu erfassen und zu verwenden.

$rev und ähnliches sind Revisionen für die einzelnen Dateien, sodass sie sich nicht ändern, es sei denn, die Datei ändert sich.Die Nummer auf der Webseite ist (ich gehe hier höchstwahrscheinlich davon aus) 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 Revisionsnummer des Projekts abruft und einen Teil der Webseite mit dieser Nummer neu schreibt.Jede CI-Lösung sollte dazu in der Lage sein, dies selbst mit CCNET und Teamcity einzurichten (allerdings keine Webseiten, sondern automatische Versionierung von Bereitstellungs-/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“.

Um die Antwort von @BradWilson zu ergänzen: „Sie können auch Ihren Quellcodeverwaltungsanbieter bitten, die Quellrevisionsnummer anzugeben, wenn Sie möchten.“

So verbinden Sie Subversion und MSBuild:MSBuild-Community-Aufgabenprojekt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top