Question

Existe-t-il un moyen d'inclure le numéro de révision du référentiel SVN dans la chaîne de version d'un assembly .NET ?Quelque chose comme Major.Minor.SVNRev

J'ai entendu parler de cela avec quelque chose comme CC.NET (bien que sur ASP.NET en fait), mais existe-t-il un moyen de le faire sans logiciel supplémentaire ?J'ai fait des choses similaires en C/C++ avant d'utiliser des scripts de build batch, mais cela a été accompli en lisant le numéro de version, puis en demandant au script d'écrire un fichier appelé "ver.h" à chaque fois avec quelque chose comme :

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

Nous utiliserions ensuite ces définitions pour générer la chaîne de version.

Est-ce que quelque chose comme ça est possible pour .NET ?

Était-ce utile?

La solution

Jetez un oeil à SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

Les numéros de version de l'assembly se trouvent généralement dans assemblyinfo.cs

Autres conseils

Voici un exemple C# pour mettre à jour automatiquement les informations de révision dans l'assembly.Il est basé sur la réponse de Will Dean, qui n'est pas très élaborée.

Exemple :

  1. Copier AssemblyInfo.cs à AssemblyInfotemplate.cs dans le dossier du projet Propriétés.
  2. Changer la Créer une action à Aucun pour AssemblyInfoTemplate.cs.
  3. Modifiez la ligne avec AssemblyFileVersion pour :

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

  4. Pensez à ajouter :

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

    qui donnera des détails sur l'état de révision de la source à partir de laquelle l'assembly a été construit.

  5. Ajoutez l'événement de pré-construction suivant aux propriétés du fichier projet :

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

  6. Pensez à ajouter AssemblyInfo.cs à la liste des ignorés svn.Les numéros et dates de révision substitués modifieront le fichier, ce qui entraînera des changements et des révisions insignifiants et $WCMODS$ sera évalué comme vrai.AssemblyInfo.cs doit bien entendu être inclus dans le projet.

En réponse aux objections de Wim Coenen, j'ai remarqué que, contrairement à ce qui a été suggéré par Darryl, AssemblyFileVersion fait également pas prend en charge les nombres supérieurs à 2 ^ 16.La construction sera terminée, mais la propriété Version du fichier dans l'assembly réel sera AssemblyFileVersion modulo 65536.Ainsi, 1.0.0.65536 ainsi que 1.0.0.131072 donneront 1.0.0.0, etc.Dans cet exemple, il y a toujours le véritable numéro de révision dans la propriété AssemblyInformationalVersion.Vous pouvez omettre l'étape 3 si vous considérez qu'il s'agit d'un problème important.

Modifier:quelques informations supplémentaires après avoir utilisé cette solution pendant un moment.

  1. Il utilise désormais AssemblyInfo.cst plutôt que AssemblyInfoTemplate.cs, car il aura automatiquement Créer une action option Aucun, et cela n'encombrera pas votre liste d'erreurs, mais vous perdrez la coloration syntaxique.
  2. J'ai ajouté deux tests à mes fichiers 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
    

    En utilisant cela, vous devrez normalement effectuer une mise à jour SVN complète, après une validation et avant de pouvoir créer une version réussie.Sinon, $WCMIXED sera vrai.Cela semble être dû au fait que les fichiers validés sont en révision principale après la validation, mais pas les autres fichiers.

  3. J'ai eu des doutes quant à savoir si le premier paramètre de subwcrev, "$(SolutionDir)", qui définit la portée de la vérification des informations sur la version svn, fonctionne toujours comme souhaité.Peut-être que cela devrait être $(ProjectDir), si vous êtes satisfait si chaque assemblage individuel est dans une révision cohérente.

Ajout Pour répondre au commentaire de @tommylux.

SubWcRev peut être utilisé pour n'importe quel fichier de votre projet.Si vous souhaitez afficher les informations de révision dans une page Web, vous pouvez utiliser ce modèle 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$;
}

Ajoutez un événement de pré-construction comme celui de AssemblyInfo.cst et vous aurez un accès facile à toutes les informations pertinentes sur la SubVersion.

C'est possible mais il ne faut pas :les composants de la chaîne de version d'assembly sont limités à des nombres de 16 bits (max 65 535).Les numéros de révision de Subversion peuvent facilement devenir plus importants et, à un moment donné, le compilateur va soudainement se plaindre.

Lisez/parcourez ces documents :

Accéder au référentiel Subversion depuis .NET à l'aide de DotSVN

Comment:Écrire une tâche

Insérez la version SVN et le numéro de build dans votre fichier C# AssemblyInfo

Compilation d'applications avec des tâches personnalisées pour le moteur Microsoft Build

La svnversion MSBuildCommunityTasks mentionnée dans la troisième référence ne fonctionnerait pas avec svn sur Mac 10.5.6 et le projet VS2008 C# construit dans Parallels hébergeant Vista (c'est-à-dire sur l'ensemble du système d'exploitation).

Écrivez votre propre tâche pour récupérer la révision du référentiel à l'aide de 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;
        }
    }
}

De cette façon, le chemin du référentiel peut être "file:///Y:/repo" où Y :est un répertoire Mac mappé dans Vista.

Une autre réponse a mentionné que le numéro de révision SVN pourrait ne pas être une bonne idée en raison de la limite de taille du numéro.

Le lien suivant fournit non seulement un numéro de révision SNV, mais également un modèle d'informations sur la version et la date.

L'ajouter à un projet .NET est simple : très peu de travail doit être effectué.

Voici un projet github qui résout ce problèmehttps://github.com/AndrewFreemantle/When-The-Version/downloads

L'URL suivante peut se charger lentement, mais constitue une explication étape par étape de la façon de faire fonctionner cela (3 ou 4 étapes faciles et courtes)

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

svn info, vous indique la version sur laquelle vous vous trouvez, vous pouvez créer un événement "pré-construction" dans VS sur votre projet pour générer le assemblyinfo.cs en exécutant svn info et en analysant ses résultats avec une application de ligne de commande développée par nous.

Je l'ai déjà fait auparavant, mais je suis rapidement passé à ce que ccnet le transmette comme variable à nant.

Si vous souhaitez mettre à jour le numéro de version dans un projet AssemblyInfo.cs, cet article pourrait vous intéresser :

CodeProjet :Utilisez les numéros de révision Subversion dans vos projets Visual Studio

Si vous activez les mots-clés SVN, chaque fois que vous archivez le projet, Subversion analyse vos fichiers à la recherche de certains "mots-clés" et remplace les mots-clés par certaines informations.

Par exemple, en haut de mes fichiers sources, je créerais un en-tête contenant les mots-clés suivants :

'$Auteur :$
'$Identifiant :$
'$Rév:$

Lorsque j'archive ce fichier dans Subversion, ces mots-clés sont remplacés par les suivants :

'$Auteur :Paulbetteridge $
'$Identifiant :monfichier.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$Rév :145 $

Vous pouvez utiliser un fichier Assembly Version partagé que vous pouvez référencer dans tous vos projets.

Uppercut est ce que ca - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

Cela vous donnera une idée de ce que vous pouvez faire pour obtenir des versions dans vos assemblys.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top