Domanda

Esiste un modo per includere il numero di revisione del repository SVN nella stringa di versione di un assembly .NET?Qualcosa come Major.Minor.SVNRev

Ho visto menzionare l'idea di farlo con qualcosa come CC.NET (anche se in realtà su ASP.NET), ma esiste un modo per farlo senza software aggiuntivo?Ho fatto cose simili in C/C++ prima di utilizzare script batch di build, ma è stato ottenuto leggendo il numero di versione, quindi facendo scrivere allo script un file chiamato "ver.h" ogni volta con qualcosa con l'effetto di:

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

Utilizzeremo quindi queste definizioni per generare la stringa della versione.

Qualcosa del genere è possibile per .NET?

È stato utile?

Soluzione

Dai un'occhiata a SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

I numeri di versione dell'assembly si trovano in genere in assemblyinfo.cs

Altri suggerimenti

Ecco un esempio in C# per aggiornare automaticamente le informazioni sulla revisione nell'assembly.Si basa sulla risposta di Will Dean, che non è molto elaborata.

Esempio :

  1. Copia AssemblyInfo.cs su AssemblyInfotemplate.cs nella cartella del progetto Proprietà.
  2. Cambiare il Costruisci azione A Nessuno per AssemblyInfoTemplate.cs.
  3. Modificare la riga con AssemblyFileVersion in:

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

  4. Considera l'idea di aggiungere:

    [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:$.")],

    che fornirà dettagli sullo stato di revisione della fonte da cui è stato creato l'assembly.

  5. Aggiungi il seguente evento di precompilazione alle proprietà del file di progetto:

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

  6. Prendi in considerazione l'aggiunta di AssemblyInfo.cs all'elenco svn ignore.I numeri e le date di revisione sostituiti modificheranno il file, il che si tradurrà in modifiche e revisioni insignificanti e $WCMODS$ verrà valutato come vero.AssemblyInfo.cs deve ovviamente essere incluso nel progetto.

In risposta alle obiezioni di Wim Coenen, ho notato che, contrariamente a quanto suggerito da Darryl, anche l'AssemblyFileVersion fa non supportano numeri superiori a 2 ^ 16.La costruzione verrà completata, ma la proprietà Versione del file nell'assembly attuale sarà AssemblyFileVersion modulo 65536.Pertanto, 1.0.0.65536 così come 1.0.0.131072 produrranno 1.0.0.0, ecc.In questo esempio è sempre presente il numero di revisione reale nella proprietà AssemblyInformationalVersion.Potresti tralasciare il passaggio 3, se lo consideri un problema significativo.

Modificare:alcune informazioni aggiuntive dopo aver utilizzato questa soluzione per un po'.

  1. Ora utilizza AssemblyInfo.cst anziché AssemblyInfoTemplate.cs, perché lo avrà automaticamente Costruisci azione opzione Nessuno, e non ingombra l'elenco degli errori, ma perderai l'evidenziazione della sintassi.
  2. Ho aggiunto due test ai miei file AssemblyInfo.cst:

    #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
    

    Utilizzando questo, normalmente dovrai eseguire un aggiornamento SVN completo, dopo un commit e prima di poter eseguire con successo una build di rilascio.Altrimenti, $WCMIXED sarà vero.Ciò sembra essere causato dal fatto che i file sottoposti a commit si trovano all'inizio della revisione dopo il commit, ma gli altri file no.

  3. Ho avuto alcuni dubbi sul fatto che il primo parametro di subwcrev, "$(SolutionDir)", che imposta l'ambito per il controllo delle informazioni sulla versione svn, funzioni sempre come desiderato.Forse dovrebbe essere $(ProjectDir), se sei soddisfatto se ogni singolo assembly è in una revisione coerente.

Aggiunta Per rispondere al commento di @tommylux.

SubWcRev può essere utilizzato per qualsiasi file nel tuo progetto.Se desideri visualizzare le informazioni sulla revisione in una pagina web, puoi utilizzare questo modello VersionInfo:

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$;
}

Aggiungi un evento di pre-compilazione proprio come quello per AssemblyInfo.cst e avrai un facile accesso a tutte le informazioni rilevanti sulla SubVersion.

È possibile ma non dovresti:i componenti della stringa della versione assembly sono limitati a numeri a 16 bit (max 65535).I numeri di revisione di Subversion possono facilmente diventare più grandi di così, quindi ad un certo punto il compilatore improvvisamente si lamenterà.

Leggi/scorri questi documenti:

Accesso al repository Subversion da .NET utilizzando DotSVN

Come:Scrivi un'attività

Inserisci la versione SVN e il numero di build nel file AssemblyInfo C#

Compilazione di app con attività personalizzate per Microsoft Build Engine

La versione svn di MSBuildCommunityTasks menzionata nel terzo riferimento non funzionerebbe con svn su Mac 10.5.6 e il progetto C# VS2008 creato all'interno di Parallels che ospita Vista (ovvero, su tutti i sistemi operativi).

Scrivi la tua attività per recuperare la revisione dal repository utilizzando DotSVN:

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

In questo modo il percorso del repository può essere "file:///Y:/repo" dove Y:è una directory Mac mappata in Vista.

Un'altra risposta ha affermato che il numero di revisione SVN potrebbe non essere una buona idea a causa del limite alla dimensione del numero.

Il seguente collegamento fornisce non solo un numero di revisione SNV, ma anche un modello di informazioni sulla versione della data.

Aggiungere questo a un progetto .NET è semplice: è necessario fare pochissimo lavoro.

Ecco un progetto Github che affronta questo problemahttps://github.com/AndrewFreemantle/When-The-Version/downloads

Il seguente URL potrebbe caricarsi lentamente ma è una spiegazione passo passo di come farlo funzionare (3 o 4 passaggi facili e brevi)

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

svn info, ti dice la versione in cui ti trovi, puoi creare un evento "pre-build" in VS sul tuo progetto per generare assemblyinfo.cs eseguendo svn info e analizzandone i risultati con un'app da riga di comando sviluppata internamente.

L'ho già fatto in precedenza, ma sono passato rapidamente a far sì che ccnet lo passasse come variabile a nant.

Se desideri aggiornare il numero di versione in un progetto AssemblyInfo.cs potresti essere interessato a questo articolo:

CodiceProgetto:Utilizza i numeri di revisione Subversion nei tuoi progetti Visual Studio

Se abiliti le parole chiave SVN, ogni volta che effettui il check-in nel progetto, Subversion esegue la scansione dei tuoi file per determinate "parole chiave" e sostituisce le parole chiave con alcune informazioni.

Ad esempio, nella parte superiore dei miei file sorgente creerei un'intestazione contenente le seguenti parole chiave:

'$Autore:$
'$Id:$
'$Rev:$

Quando controllo questo file in Subversion, queste parole chiave vengono sostituite con le seguenti:

'$Autore:Paulbetteridge $
'$Id:miofile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$Rev:145 $

Puoi utilizzare un file della versione dell'assembly condiviso a cui puoi fare riferimento in tutti i tuoi progetti.

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

Questo ti darà un'idea di cosa puoi fare per ottenere le versioni nei tuoi assembly.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top