Frage

Gibt es eine Möglichkeit, die Revisionsnummer des SVN-Repositorys in die Versionszeichenfolge einer .NET-Assembly aufzunehmen?Etwas wie Major.Minor.SVNRev

Ich habe erwähnt, dass dies mit etwas wie CC.NET (obwohl eigentlich mit ASP.NET) durchgeführt werden soll, aber gibt es eine Möglichkeit, dies ohne zusätzliche Software zu tun?Ich habe ähnliche Dinge in C/C++ gemacht, bevor ich Build-Batch-Skripte verwendet habe, aber das wurde dadurch erreicht, dass ich die Versionsnummer las und das Skript dann jedes Mal eine Datei namens „ver.h“ schreiben ließ, mit folgendem Effekt:

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

Wir würden diese Definitionen dann verwenden, um die Versionszeichenfolge zu generieren.

Ist so etwas für .NET möglich?

War es hilfreich?

Lösung

Schauen Sie sich SubWCRev an - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

Die Assembly-Versionsnummern befinden sich normalerweise in „assemblyinfo.cs“.

Andere Tipps

Hier ist ein C#-Beispiel für die automatische Aktualisierung der Revisionsinformationen in der Assembly.Es basiert auf der Antwort von Will Dean, die nicht sehr ausführlich ist.

Beispiel :

  1. Kopieren Sie AssemblyInfo.cs in AssemblyInfotemplate.cs im Ordner des Projekts Eigenschaften.
  2. Ändere das Aktion erstellen Zu Keiner für AssemblyInfoTemplate.cs.
  3. Ändern Sie die Zeile mit der AssemblyFileVersion wie folgt:

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. Erwägen Sie das Hinzufügen von:

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    Hier finden Sie Einzelheiten zum Revisionsstatus der Quelle, aus der die Assembly erstellt wurde.

  5. Fügen Sie das folgende Pre-Build-Ereignis zu den Eigenschaften der Projektdatei hinzu:

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. Erwägen Sie, AssemblyInfo.cs zur SVN-Ignorierliste hinzuzufügen.Durch ersetzte Revisionsnummern und -daten wird die Datei geändert, was zu unbedeutenden Änderungen und Revisionen führt und $WCMODS$ als wahr ausgewertet wird.AssemblyInfo.cs muss natürlich im Projekt enthalten sein.

Als Reaktion auf die Einwände von Wim Coenen fiel mir auf, dass die AssemblyFileVersion dies im Gegensatz zu dem, was Darryl vorgeschlagen hatte, auch tut nicht Unterstützungszahlen über 2^16.Der Bau wird abgeschlossen sein, aber die Immobilie Dateiversion in der tatsächlichen Assembly wird AssemblyFileVersion Modulo 65536 sein.Somit ergeben 1.0.0.65536 sowie 1.0.0.131072 1.0.0.0 usw.In diesem Beispiel gibt es immer die wahre Revisionsnummer in der Eigenschaft „AssemblyInformationalVersion“.Sie können Schritt 3 weglassen, wenn Sie dies für ein erhebliches Problem halten.

Bearbeiten:Einige zusätzliche Informationen, nachdem ich diese Lösung eine Weile verwendet habe.

  1. Es verwendet jetzt AssemblyInfo.cst anstelle von AssemblyInfoTemplate.cs, da dies automatisch der Fall ist Aktion erstellen Möglichkeit Keiner, und die Fehlerliste wird dadurch nicht überfüllt, aber Sie verlieren die Syntaxhervorhebung.
  2. Ich habe meinen AssemblyInfo.cst-Dateien zwei Tests hinzugefügt:

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    Damit müssen Sie normalerweise nach einem Commit ein vollständiges SVN-Update durchführen, bevor Sie einen erfolgreichen Release-Build durchführen können.Andernfalls ist $WCMIXED wahr.Dies scheint darauf zurückzuführen zu sein, dass die festgeschriebenen Dateien nach dem Festschreiben in der Hauptrevision sind, andere Dateien jedoch nicht.

  3. Ich hatte einige Zweifel, ob der erste Parameter von subwcrev, „$(SolutionDir)“, der den Bereich für die Überprüfung der SVN-Versionsinformationen festlegt, immer wie gewünscht funktioniert.Vielleicht sollte es $(ProjectDir) sein, wenn Sie damit zufrieden sind, dass sich jede einzelne Baugruppe in einer konsistenten Revision befindet.

Zusatz Um den Kommentar von @tommylux zu beantworten.

SubWcRev kann für jede Datei in Ihrem Projekt verwendet werden.Wenn Sie Revisionsinformationen auf einer Webseite anzeigen möchten, können Sie diese VersionInfo-Vorlage verwenden:

public class VersionInfo
{       
    public const int RevisionNumber = $WCREV$;
    public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
    public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
    public const string RevisionsInWorkingCopy = "$WCRANGE$";
    public const bool UncommitedModification = $WCMODS?true:false$;
}

Fügen Sie ein Pre-Build-Ereignis hinzu, genau wie das für AssemblyInfo.cst, und Sie haben einfachen Zugriff auf alle relevanten SubVersion-Informationen.

Es ist möglich, aber Sie sollten nicht:Die Komponenten der Assembly-Versionszeichenfolge sind auf 16-Bit-Zahlen (maximal 65535) beschränkt.Die Revisionsnummern von Subversion können leicht größer werden, sodass sich der Compiler irgendwann plötzlich beschwert.

Lesen/überfliegen Sie diese Dokumente:

Zugriff auf das Subversion-Repository von .NET mit DotSVN

Wie man:Schreiben Sie eine Aufgabe

Fügen Sie die SVN-Version und die Build-Nummer in Ihre C#-AssemblyInfo-Datei ein

Kompilieren von Apps mit benutzerdefinierten Aufgaben für die Microsoft Build Engine

Die in der dritten Referenz erwähnte SVN-Version von MSBuildCommunityTasks würde mit SVN auf Mac 10.5.6 und VS2008 C#-Projekterstellung innerhalb von Parallels, das Vista hostet (d. h. betriebssystemübergreifend), nicht funktionieren.

Schreiben Sie Ihre eigene Aufgabe, um mit DotSVN eine Revision aus dem Repository abzurufen:

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using DotSVN.Common;
using DotSVN.Common.Entities;
using DotSVN.Common.Util;
using DotSVN.Server.RepositoryAccess;

namespace GetSVNVersion
{
    public class GetRevision : Task
    {
        [Required]
        public string Repository { get; set; }
        [Output]
        public string Revision { get; set; }

        public override bool Execute()
        {
            ISVNRepository repo;
            bool connected = true;
            try
            {
                repo = SVNRepositoryFactory.Create(new SVNURL(Repository));
                repo.OpenRepository();
                Revision = repo.GetLatestRevision().ToString();
                Log.LogCommandLine(Repository + " is revision " + Revision);
                repo.CloseRepository();
            }
            catch(Exception e)
            {
                Log.LogError("Error retrieving revision number for " + Repository + ": " + e.Message);
                connected = false;
            }
            return connected;
        }
    }
}

Auf diese Weise kann der Repository-Pfad „file:///Y:/repo“ lauten, wobei Y:ist ein Mac-Verzeichnis, das Vista zugeordnet ist.

In einer anderen Antwort wurde erwähnt, dass die SVN-Revisionsnummer aufgrund der Begrenzung der Nummerngröße möglicherweise keine gute Idee sei.

Der folgende Link bietet nicht nur eine SNV-Revisionsnummer, sondern auch eine Informationsvorlage zur Datumsversion.

Das Hinzufügen zu einem .NET-Projekt ist einfach – es muss nur sehr wenig Arbeit geleistet werden.

Hier ist ein Github-Projekt, das sich damit befassthttps://github.com/AndrewFreemantle/When-The-Version/downloads

Die folgende URL wird möglicherweise langsam geladen, ist jedoch eine Schritt-für-Schritt-Erklärung, wie dies funktioniert (einfach und in kurzen 3 oder 4 Schritten).

http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

svn info, teilt Ihnen die Version mit, auf der Sie sich befinden. Sie können in VS ein „Pre-Build“-Ereignis für Ihr Projekt durchführen, um die Datei „assemblyinfo.cs“ zu generieren, indem Sie svn info ausführen und die Ergebnisse mit einer selbst erstellten Befehlszeilen-App analysieren.

Ich habe das schon einmal gemacht, bin dann aber schnell dazu übergegangen, es einfach von ccnet als Variable an Nant übergeben zu lassen.

Wenn Sie die Versionsnummer in einem Projekt „AssemblyInfo.cs“ aktualisieren möchten, könnte dieser Artikel für Sie von Interesse sein:

CodeProjekt:Verwenden Sie Subversion-Revisionsnummern in Ihren Visual Studio-Projekten

Wenn Sie SVN-Schlüsselwörter aktivieren, durchsucht Subversion Ihre Dateien jedes Mal, wenn Sie das Projekt einchecken, nach bestimmten „Schlüsselwörtern“ und ersetzt die Schlüsselwörter durch einige Informationen.

Zum Beispiel würde ich oben in meinen Quelldateien einen Header erstellen, der die folgenden Schlüsselwörter enthält:

'$Autor:$
'$Id:$
'$Rev:$

Wenn ich diese Datei in Subversion einchecke, werden diese Schlüsselwörter durch Folgendes ersetzt:

'$Autor:paulbetteridge $
'$Id:myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$Rev:145 $

Sie können eine freigegebene Assembly-Versionsdatei verwenden, auf die Sie in allen Ihren Projekten verweisen können.

UppercuT macht dies - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

Dadurch erhalten Sie eine Vorstellung davon, was Sie tun können, um Versionen in Ihren Assemblys zu erhalten.

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