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

Translate

Der Stapelüberlauf hat unten eine Versionsnummer der Subversion:

SVN-Revision: 679

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

Wie implementiere ich das?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Sieht aus wie Jeff verwendetCruiseControl.NETbasierend 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 die Einfügung stattfindet?

Quelle
Translate

Wir machen das mitxUnit.netfür unsere automatisierten Builds. Wir gebrauchenCruiseControl.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.

UnsereMSBuild-Dateienthä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 dazu bringen, 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.

 <!-- 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, und dann ccnetlabel, das von CC.net stammt. 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 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 SetVersionNumber-Aufgabe 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.

Quelle
Translate

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 auchfand diese Referenz.

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

Quelle
Translate

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

Quelle
Translate

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

Quelle
Translate

$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 dies tun können. 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".

Quelle
jan
Translate

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

Quelle