Mise à jour automatique numéro de version

voix
95

Je voudrais la propriété version de mon application à incrémentée pour chaque version, mais je ne suis pas sûr comment activer cette fonctionnalité dans Visual Studio (2005/2008). J'ai essayé de préciser le AssemblyVersion comme 1.0. * Mais il ne me prenez pas exactement ce que je veux.

J'utilise également un fichier de paramètres et dans les tentatives antérieures lorsque la version d'assemblage changé mes paramètres se sont remis à la valeur par défaut depuis l'application recherchée du fichier de paramètres dans un autre répertoire.

Je voudrais être en mesure d'afficher un numéro de version sous forme de 1.1.38 donc quand un utilisateur trouve un problème, je peux connecter la version qu'ils utilisent ainsi que leur dire de mettre à niveau si elles ont une ancienne version.

Une brève explication de la façon dont les travaux de versioning serait également appréciée. Quand est-incrémentée le numéro de build et de révision?

Créé 03/08/2008 à 12:12
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
85

Avec le « CONÇU dans » des choses, vous ne pouvez pas, en utilisant 1.0. * Ou 1.0.0. * Remplacera la révision et les numéros avec une date / horodatage codé, qui est généralement aussi un bon moyen.

Pour plus d' informations, voir l' Assemblée Linker Documentation dans la balise / v.

En ce qui concerne les numéros incrémenter automatiquement, utilisez le AssemblyInfo Tâche:

AssemblyInfo Tâche

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

Il y a 2 Gotchas:

  1. Chacun des 4 numéros dans la chaîne de version est limitée à 65535. Ceci est une limitation de Windows et peu susceptible de se fixe.
  2. Utilisation avec Subversion a besoin d'un petit changement:

Récupération le numéro de version est alors assez facile:

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 de préciser: Dans .net ou tout au moins en C #, la construction est en fait le troisième numéro, pas le quatrième que certaines personnes (par exemple Delphi développeurs qui sont habitués à Major.Minor.Release.Build) pourrait attendre.

Dans .net, il est major.minor.build.revision.

Créé 03/08/2008 à 12:41
source utilisateur

voix
19

Par défaut VS.NET la version Assemblée à 1.0 * et utilise la logique suivante lorsque auto-incrémentée:. Il définit la partie de construction au nombre de jours depuis le 1er Janvier 2000, et définit la partie de révision au nombre de secondes écoulées depuis minuit, heure locale, divisée par deux. Voir cet article MSDN .

version Assemblée se trouve dans un fichier AssemblyInfo.vb ou AssemblyInfo.cs. A partir du fichier:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
Créé 30/09/2008 à 21:58
source utilisateur

voix
8

J'ai trouvé que cela fonctionne bien pour afficher simplement la date de la dernière construction en utilisant les éléments suivants chaque fois qu'une version du produit est nécessaire:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

Plutôt que d'essayer d'obtenir la version de quelque chose comme ce qui suit:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
Créé 04/03/2013 à 21:58
source utilisateur

voix
6

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

La quasi-totalité d'entre eux ont une certaine forme de $ Id étiquette $ qui obtient augmenté lorsque le fichier est vérifié.

J'utilise généralement une certaine forme de carriole pour afficher ce que le numéro de version.

L'autre alternative est l'utilisation d'utiliser la date comme le numéro de build: 080803-1448

Créé 03/08/2008 à 19:46
source utilisateur

voix
2

[Visual Studio 2017, .csproj propriétés]

Pour mettre à jour automatiquement votre PackageVersion / Version / propriété AssemblyVersion (ou tout autre bien), tout d' abord, créer une nouvelle Microsoft.Build.Utilities.Taskclasse qui permettra à votre numéro de build en cours et renvoyer le numéro mis à jour (je vous recommande de créer un projet distinct seulement pour cette classe).

Mettre à jour manuellement les numéros MAJOR.MINOR, mais laissez - 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;
    }

}

Ensuite, appelez votre récemment créé la tâche sur le processus MSBuild ajoutant le code suivant sur 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 cueillette l' option de projet Visual Studio Pack ( il suffit de changer à BeforeTargets="Build"pour exécuter la tâche avant de Construire) le code RefreshVersion sera déclenché pour calculer le nouveau numéro de version, et XmlPoketâche de mettre à jour votre propriété .csproj en conséquence (oui, il modifiera le fichier).

Lorsque vous travaillez avec des bibliothèques NuGet, je vous envoie aussi le paquet au dépôt NuGet en ajoutant simplement la tâche suivante de construction à 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\nugetest où j'ai le client NuGet (souvenez - vous d'enregistrer votre clé API NuGet en appelant nuget SetApiKey <my-api-key>ou pour inclure la clé sur l'appel push NuGet).

Juste au cas où il aide quelqu'un ^ _ ^.

Créé 10/05/2017 à 14:08
source utilisateur

voix
1

Il y a quelque temps j'ai écrit un exe rapide et sale qui mettrait à jour les # 's version dans un AssemblyInfo {cs / vb} -. J'ai aussi utilisé rxfind.exe (une recherche basée regex simple et puissant remplacer l'outil) pour faire le mettre à jour à partir d'une ligne de commande dans le cadre du processus de construction. Quelques autres conseils de helpfule:

  1. séparer les AssemblyInfo en parties de produit (nom de la société, version, etc.) et l' assemblage de pièces spécifiques (nom de l' assemblage , etc.). voir ici
  2. Aussi - j'utiliser la subversion, donc je l'ai trouvé utile de définir le numéro de build au numéro de révision de subversion ce qui rend vraiment facile d'obtenir toujours à la base de code qui a généré l'ensemble (par exemple 1.4.100.1502 a été construit de la révision 1502).
Créé 04/08/2008 à 20:51
source utilisateur

voix
0

Si vous voulez un numéro incrémentiel automatique qui met à jour chaque fois qu'une compilation est faite, vous pouvez utiliser VersionUpdater d'un événement pré-construction. Votre événement pré-construction peut vérifier la configuration de construction si vous le préférez que le numéro de version n'augmente que pour une version Release (par exemple).

Créé 28/02/2010 à 22:16
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more