#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
Ensuite, je prends bien garde de glisser-déposer ce fichier dans mon projet pour qu’il soit inclus dans le package final.
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;
Commentaires