114 votes

Mettre à jour automatiquement le numéro de version

Je voudrais la version propriété de ma demande à être incrémenté pour chaque version mais je ne sais pas comment activer cette fonctionnalité dans Visual Studio (2005/2008). J'ai essayé de préciser la AssemblyVersion que 1.0.* mais ce n'est pas moi exactement ce que je veux.

Je suis également en utilisant un fichier de settings et dans les tentatives précédentes lors de l'assemblée de la version a changé mes paramètres ai réinitialisé à la valeur par défaut depuis l'application regardé pour le fichier de paramètres dans un autre répertoire.

Je voudrais être en mesure d'afficher un numéro de version dans le formulaire de 1.1.38 ainsi, lorsqu'un utilisateur rencontre un problème je peux me connecter à la version qu'ils utilisent ainsi que de leur dire de mise à niveau si ils ont une ancienne version.

Une brève explication de la façon dont la gestion des versions des œuvres serait également appréciée. Quand le construire et le numéro de révision incrémentée?

97voto

Michael Stum Points 72046

Avec le "Intégrée" des choses, vous ne pouvez pas, comme l'utilisation de 1,0.* ou 1.0.0.* remplacera la révision et le numéro de build avec un code de date/timestamp, qui est généralement aussi un bon moyen.

Pour plus d'informations, consultez l' Assemblée de l'éditeur de liens de la Documentation dans le /v balise.

Comme pour l'incrémentation automatique des numéros, 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 Problèmes:

  1. Chacun des 4 numéros dans la chaîne de Version est limitée à 65535. C'est une Restriction Windows et les chances d'obtenir fixe.
  2. Utilisant avec Subversion nécessite une petite modification:

Récupérer le numéro de Version est donc très 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 au moins en C#, le build est actuellement le TROISIÈME numéro, pas le quatrième que certaines personnes (par exemple aux Développeurs Delphi qui sont utilisés pour les Grands.Mineure.La libération.Build) pourrait s'attendre.

Dans .net, c'est Majeur.Mineure.Construire.La révision.

21voto

Solracnapod Points 490

VS.NET par défaut, l'Assemblée de la version 1.0.* et utilise la logique suivante lorsque l'auto-incrémentation: il définit la construction de la partie pour le nombre de jours depuis le 1er janvier 2000, et définit la révision de la partie pour le nombre de secondes depuis minuit, heure locale, divisé par deux. Voir cet article MSDN.

La version de l'Assembly est situé dans un assemblyinfo.vb ou assemblyinfo.cs fichier. À partir de ce 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")> 

12voto

Roger Points 499

J’ai trouvé que cela fonctionne bien d’afficher simplement la date de la dernière construction en utilisant les éléments suivants partout où une version du produit est nécessaire:

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

Plutôt que d'essayer d'obtenir la version à partir 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;
}
 

5voto

engtech Points 1594

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

1voto

caryden Points 4195

Il y a quelques temps, j'ai écrit un rapide et sale exe qui permettrait de mettre à jour la version #'s dans un assemblyinfo.{cs/vb} - j'ai également utilisé rxfind.exe (un moyen simple et puissant de la regex de la base de recherche, de remplacer l'outil) pour faire la mise à jour à partir d'une ligne de commande dans le cadre du processus de construction. Un couple de d'autres helpfule conseils:

  1. séparer les assemblyinfo dans les pièces de ce produit (nom de l'entreprise, version, etc.) et de l'assemblée des parties spécifiques (nom de l'assembly, etc.). Voir ici
  2. Aussi - je utiliser subversion, j'ai donc trouvé utile de définir le numéro de build de numéro de révision subversion ce qui rend vraiment facile de toujours revenir à la base de code qui a généré l'assemblée (par exemple 1.4.100.1502 a été construit à partir de révision 1502).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X