c# - visual - vsts auto increment build number




Mettre à jour automatiquement le numéro de version (5)

Avec l'option "Built in", vous ne pouvez pas, car utiliser 1.0. * Ou 1.0.0. * Remplacera les numéros de révision et de construction par une date / un horodatage codé, ce qui est généralement aussi un bon moyen.

Pour plus d'informations, consultez la documentation Assembly Linker dans la balise / v.

Pour incrémenter automatiquement les nombres, utilisez la tâche AssemblyInfo:

Tâche AssemblyInfo

Cela peut être configuré pour incrémenter automatiquement le numéro de build.

Il y a 2 pièges:

  1. Chacun des 4 numéros de la chaîne Version est limité à 65535. Il s'agit d'une limitation de Windows et il est peu probable qu'il soit corrigé.
  2. Utiliser avec avec Subversion nécessite un petit changement:

Récupérer le numéro de version est alors assez simple:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

Et, pour clarifier: en .net ou au moins en C #, la construction est en réalité le TROISIÈME nombre, pas le quatrième comme le voudraient certaines personnes (par exemple, les développeurs Delphi habitués à Major.Minor.Release.Build).

Dans .net, c'est Major.Minor.Build.Revision.

J'aimerais que la propriété version de mon application soit incrémentée pour chaque construction, mais je ne sais pas comment activer cette fonctionnalité dans Visual Studio (2005/2008). J'ai essayé de spécifier AssemblyVersion à 1.0. *, Mais cela ne me donne pas exactement ce que je veux.

J'utilise également un fichier de paramètres. Lors de tentatives précédentes, lorsque la version de l'assembly avait changé, mes paramètres avaient été réinitialisés, car l'application avait recherché le fichier de paramètres dans un autre répertoire.

J'aimerais pouvoir afficher un numéro de version sous la forme 1.1.38. Ainsi, lorsqu'un utilisateur découvre un problème, je peux enregistrer la version qu'il utilise et lui indiquer de mettre à niveau s'il dispose d'une ancienne version.

Une brève explication du fonctionnement du contrôle de version serait également appréciée. Quand le numéro de construction et le numéro de révision sont-ils incrémentés?


Il y a quelque temps, j’ai écrit un exe rapide et sale qui mettrait à jour les n ° de version dans un assemblyinfo. {Cs / vb} - j’ai aussi utilisé rxfind.exe (un outil de remplacement de recherche simple et puissant basé sur regex) pour effectuer la mettre à jour à partir d'une ligne de commande dans le cadre du processus de construction. Quelques autres astuces sur helpfule:

  1. séparez l'assemblage en parties du produit (nom de l'entreprise, version, etc.) et en pièces spécifiques de l'assemblage (nom de l'assemblage, etc.). Voir here
  2. De plus, j’utilise subversion, j’ai donc trouvé utile de définir le numéro de version sur le numéro de révision de subversion, ce qui facilite énormément le retour à la base de code qui a généré l’assemblage (par exemple, 1.4.100.1502 a été créé à partir de la révision 1502).

Quel système de contrôle de source utilisez-vous?

Presque tous ont une forme de balise $ Id $ qui est développée lorsque le fichier est archivé.

J'utilise généralement une certaine forme de hackery pour l'afficher comme numéro de version.

L’autre alternative est d’utiliser la date comme numéro de build: 080803-1448


Si vous souhaitez un numéro incrémenté automatiquement qui est mis à jour chaque fois qu'une compilation est effectuée, vous pouvez utiliser VersionUpdater partir d'un événement de pré-génération. Votre événement de pré-génération peut vérifier la configuration de génération si vous préférez, de sorte que le numéro de version ne sera incrémenté que pour une version Release (par exemple).


[Propriétés de Visual Studio 2017, .csproj ]

Pour mettre à jour automatiquement votre propriété PackageVersion / Version / AssemblyVersion (ou toute autre propriété), créez d’abord une nouvelle classe Microsoft.Build.Utilities.Task qui obtiendra votre numéro de construction actuel et renverra le numéro mis à jour (il est recommandé de créer un fichier séparé). projet juste pour cette classe).

Je mets à jour manuellement les numéros major.minor, mais je laisse MSBuild mettre à jour automatiquement le numéro de build (1.1. 1 , 1.1. 2 , 1.1. 3 , etc. :)

using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;

public class RefreshVersion : Microsoft.Build.Utilities.Task
{
    [Output]
    public string NewVersionString { get; set; }
    public string CurrentVersionString { get; set; } 

    public override bool Execute()
    {       
        Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");

        DateTime d = DateTime.Now;
        NewVersionString = new Version(currentVersion.Major, 
            currentVersion.Minor, currentVersion.Build+1).ToString();
        return true;
    }

}

Appelez ensuite votre tâche récemment créée sur le processus MSBuild en ajoutant le code suivant à votre fichier .csproj:

<Project Sdk="Microsoft.NET.Sdk">    
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
   <RefreshVersion CurrentVersionString="$(PackageVersion)">
          <Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />             
   </RefreshVersion>
   <Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
   <XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
 ..
 <PackageVersion>1.1.4</PackageVersion>
 ..

Lors de la sélection de l’option de projet Visual Studio Pack (il suffit de modifier BeforeTargets="Build" pour exécuter la tâche avant la génération), le code RefreshVersion sera déclenché pour calculer le nouveau numéro de version et la tâche XmlPoke mettra à jour votre propriété .csproj en conséquence (oui, modifiera le fichier).

Lorsque je travaille avec des bibliothèques NuGet, j'envoie également le paquet au référentiel NuGet en ajoutant simplement la tâche de construction suivante à l'exemple précédent.

<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />

c:\nuget\nuget est où se trouve le client NuGet (n'oubliez pas de sauvegarder votre clé d'API NuGet en appelant le nuget SetApiKey <my-api-key> ou d'inclure la clé dans l'appel push de NuGet).

Juste au cas où cela aiderait quelqu'un ^ _ ^.







versioning