Comment (bien) récupérer le numéro de version de l’application

Un code très simple aujourd’hui mais terriblement efficace.

Lorsque l’on fait une recherche internet sur « Comment récupérer le numéro de version de l’application », on a 95% de chances de trouver un solution erronée. Par exemple :

http://stackoverflow.com/questions/3833354/how-to-get-app-version-in-windows-phone
http://stackoverflow.com/questions/4153049/get-assembly-version-on-windows-phone-7

var nameHelper = new AssemblyName(Assembly.GetExecutingAssembly().FullName);
var version = nameHelper.Version;

 

String appVersion = System.Reflection.Assembly.GetExecutingAssembly().FullName.Split('=')[1].Split(',')[0];

 

var versionString = assembly.GetCustomAttributes(false)
.OfType()
.First()
.Version;

 

private static string GetVersionNumber()
{
var asm = Assembly.GetExecutingAssembly();
var parts = asm.FullName.Split(',');
return parts[1].Split('=')[1];
}

etc…

Autant le dire tout de suite : aucune de ces solutions n’est correct.

Pourquoi ?

Tout simplement car c’est sur le App Hub Windows Phone Dev Center que l’on spécifie le numéro de l’application et non dans les assemblies. Lorsque l’on soumet son application, le WPDC insère bien le numéro de version dans l’application, mais pas au niveau des assemblies, mais au niveau du WMAppManifest.xml. Rappelons que ce fichier est totalement regénéré par le WPDC, il est donc par exemple totalement inutile de modifier manuellement les capabilities, le nom de l’application, etc… seul les noeuds  Tasks, Tokens et Extensions seront récupérés, le reste sera totalement ignoré.

Solution

J’avais prévenu, le code est ultra simpliste, il se contente d’ouvrir le fichier WPAppManifest.xml, de parser le fichier, de récupérer le noeud App et son attribut Version, puis de récupérer que la partie qui nous intéresse (1.2.0.0 ==> 1.2)


public static String GetVersionNumber()
{
try
{
var app = XElement.Load("WMAppManifest.xml");
var version=app.Element("App").Attribute("Version").Value;
return version.Substring(0, version.IndexOf('.', version.IndexOf('.')+1));
}
catch
{
return "";
}
}

Pourquoi quand je teste ça retourne 1.0 alors que mon application est en 2.3?

Tout simplement car vous testez votre application sans être passé par le app hub, votre WMAppManifest.xml n’a donc pas encore été modifié.

Bon code !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>