Question

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

J'utilise également un fichier de paramètres et lors de tentatives précédentes, lorsque la version de l'assembly a modifié, mes paramètres ont été réinitialisés aux valeurs par défaut puisque l'application recherchait 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 afin que lorsqu'un utilisateur trouve un problème, je puisse enregistrer la version qu'il utilise et lui dire de mettre à niveau s'il dispose d'une ancienne version.

Une brève explication du fonctionnement du versioning serait également appréciée.Quand le numéro de build et de révision est-il incrémenté ?

Était-ce utile?

La solution

Avec les éléments "intégrés", vous ne pouvez pas, car l'utilisation de 1.0.* ou 1.0.0.* remplacera les numéros de révision et de build par une date/horodatage codé, ce qui est généralement également un bon moyen.

Pour plus d'informations, consultez le Éditeur de liens d'assemblage Documentation dans la balise /v.

En ce qui concerne les nombres à incrémentation automatique, utilisez la tâche AssemblyInfo :

Tâche AssemblyInfo

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

Il y a 2 pièges :

  1. Chacun des 4 nombres de la chaîne Version est limité à 65535.Il s'agit d'une limitation de Windows et il est peu probable qu'elle soit corrigée.
  2. L'utilisation de with 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 préciser :En .net ou du moins en C#, la build est en fait le TROISIÈME numéro, pas le quatrième comme certaines personnes (par exemple les développeurs Delphi habitués à Major.Minor.Release.Build) pourraient s'y attendre.

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

Autres conseils

VS.NET définit par défaut la version Assembly sur 1.0.* et utilise la logique suivante lors de l'auto-incrémentation :il définit la partie construction sur le nombre de jours depuis le 1er janvier 2000 et définit la partie révision sur le nombre de secondes depuis minuit, heure locale, divisé par deux.Regarde ça Article MSDN.

La version de l'assembly se trouve dans un fichier assemblyinfo.vb ou assemblyinfo.cs.À 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")> 

J'ai trouvé que cela fonctionne bien d'afficher simplement la date de la dernière version en utilisant ce qui suit partout où 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 à partir de quelque chose comme ceci :

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

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 forme de piratage pour afficher ceci comme numéro de version.

L'autre alternative consiste à utiliser la date comme numéro de build :080803-1448

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

Pour mettre à jour automatiquement votre propriété PackageVersion/Version/AssemblyVersion (ou toute autre propriété), créez d'abord un nouveau Microsoft.Build.Utilities.Task classe qui obtiendra votre numéro de build actuel et renverra le numéro mis à jour (je recommande de créer un projet séparé uniquement 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 processus Task on MSBuild récemment créé en 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>
 ..

Lorsque vous choisissez l'option de projet Visual Studio Pack (il suffit de changer pour BeforeTargets="Build" pour exécuter la tâche avant Build), le code RefreshVersion sera déclenché pour calculer le nouveau numéro de version, et XmlPoke La tâche mettra à jour votre propriété .csproj en conséquence (oui, elle modifiera le fichier).

Lorsque je travaille avec des bibliothèques NuGet, j'envoie également le package 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 C'est là que j'ai le client NuGet (n'oubliez pas de sauvegarder votre clé API NuGet en appelant nuget SetApiKey <my-api-key> ou pour inclure la clé dans l'appel push NuGet).

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

Il y a quelque temps, j'ai écrit un exe rapide et sale qui mettrait à jour les numéros de version dans une info d'assemblage. {cs/vb} - J'ai également utilisé rxfind.exe (un outil de remplacement de recherche simple et puissant basé sur regex) pour effectuer le mise à jour à partir d'une ligne de commande dans le cadre du processus de construction.Quelques autres conseils utiles :

  1. séparez les informations d'assemblage en parties de produit (nom de l'entreprise, version, etc.) et en parties spécifiques à l'assemblage (nom de l'assemblage, etc.).Voir ici
  2. De plus, j'utilise Subversion, j'ai donc trouvé utile de définir le numéro de build sur le numéro de révision de Subversion, ce qui permet de toujours revenir facilement à la base de code qui a généré l'assembly (par ex.1.4.100.1502 a été construit à partir de la révision 1502).

Si vous souhaitez un numéro à incrémentation automatique qui se met à jour à chaque fois qu'une compilation est effectuée, vous pouvez utiliser VersionUpdater à partir d'un événement de pré-construction.Votre événement de pré-build peut vérifier la configuration de build si vous préférez afin que le numéro de version n'incrémente que pour une build Release (par exemple).

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