Loupe

#UniversalApp : comment obtenir et afficher la date et l’heure de compilation ?

C’est une fonctionnalité bien pratique lorsque nous sommes en phase de tests car le testeur peut nous indiquer exactement sur quelle build il travaille. Je vais vous présenter ici les deux manières que j’utilise.

 

Utiliser Visual Studio

La solution la plus rapide et simple à mettre en place est de laisser le travail à Visual Studio! Pour cela, je mets à jour le numéro d’assembly de l’application en automatique en configurant mon fichier AssemblyInfo.cs de cette manière :

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

 

Vous ne le savez peut être pas, mais Visual Studio génère un numéro de build et de révision en comptant le nombre de jours depuis le 1er janvier 2000 et de secondes depuis minuit.

Il va alors me falloir lire le numéro de version de l’assembly depuis mon application Universal. Pour cela, c’est un peu plus compliqué que d’habitude car la propriété “Current” nous renvoyant l’assembly courante n’existe pas. Nous allons donc devoir demander de charger l’assembly à partir de son nom. Par défaut, il s’agit du nom de votre projet.

Voici le code complet :

var assembly = Assembly.Load(new AssemblyName("NomDeLApp.Windows"));
var assemblyVersion = assembly.GetName().Version;

var buildDateTime = new DateTime(2000, 1, 1).ToUniversalTime()
    .Add(new TimeSpan(
    // Build number = jours depuis le 1er janvier 2000
        TimeSpan.TicksPerDay * assemblyVersion.Build +
    // Révision = secondes depuis minuit divisé par 2
        TimeSpan.TicksPerSecond * 2 * assemblyVersion.Revision));

var buildTime = buildDateTime.ToLocalTime().ToString("F");

 

Et sans se reposer sur le numéro d’assembly ?

Il n’est pas toujours possible de se baser sur le numéro de version de l’assembly… Comment faire alors ?

 

Générer un fichier contenant l’heure et la date de compilation

La solution la plus simple que j’ai pu imaginer et la suivante : générer un fichier contenant l’heure et la date lors de la compilation. Pour cela, je me branche sur le Pre-Build-Event pour rajouter ces lignes qui vont simplement être exécutées avant chaque compilation.

echo %DATE% - %TIME% > $(ProjectDir)/Properties/buildTime.txt

prebuildEvent

 

 

Ensuite, je prends bien garde de glisser-déposer ce fichier dans mon projet pour qu’il soit inclus dans le package final.

project

 

Lire ce fichier dans l’application

Ensuite, il ne nous reste plus qu’à lire le contenu de ce fichier pour l’afficher dans notre application à la demande. J’en profite pour afficher aussi le numéro de version du package :

var fileUri = new Uri("ms-appx:///Properties/buildTime.txt", UriKind.Absolute);
var buildTimeFile = await StorageFile.GetFileFromApplicationUriAsync(fileUri);
var buildTime = await FileIO.ReadTextAsync(buildTimeFile);

_buildTimeTextBlock.Text = string.Format("Génération : {0}", buildTime);

var version = Package.Current.Id.Version;
_versionTextBlock.Text = 
         version.Major + "." + version.Minor + "." 
          + version.Revision + "." + version.Build;


Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus