Il y a quelques années j’ai écrit un article sur « codeppc », un site dédié au développement sur plate-forme WinCE. A l’époque, je déplorai l’absence de l’assembly System.Configuration et du fichier de configuration App.config sur le .NET Compact Framework 1.0.
Force est de constater que 6 ans après sa sortie, le Compact Framework 3.5 n’apporte toujours pas cette fonctionnalité pourtant bien pratique qui consiste à pouvoir externaliser des variables dans un fichier XML et de pouvoir les récupérer simplement dans une application sur Pocket PC ou smartphone simplement via une classe technique .NET. Heureusement, il en fournit bien d’autres…
Le Compact Framework de l’époque offrait toutefois la possibilité de manipuler une source XML à travers l’assembly System.Xml et nous pouvions assez facilement recréer une classe technique pour manipuler un fichier de type App.Config (cf. http://www.codeppc.com/articles/sde2/sde2.htm ).
Aujourd’hui, le .NET CF 3.5 permet d’utiliser la technologie Linq to Object et Linq to XML pour construire, lire et modifier une source XML.
Je me suis donc amusé avec les classes XDocument et XElement de Linq to Xml pour simuler le comportement de la classe ConfigurationSettings du framework .NET et de la propriété AppSettings.
Pour se faire, je propose d’externaliser cette classe dans une assembly ConfigurationManager.dll en créant un projet SmartDevice de type Class Library dans Visual Studio 2008.
Créons au sein de cette classe une propriété statique permettant de récupérer le chemin de l’app.config déployer sur le PPC.
Remarquer l’utilisation de la « réflexion » pour récupérer le répertoire de l’assembly en cours d’éxécution. Bon OK, la lignede code est un peu longue… mais bon, elle est fun, non ? Nous allons ensuite créer une méthode statique AppSettings permettant de récupérer la valeur de l’attribut value de l’élément <add> en passant le nom de la clé (attribut key) en paramètre de la méthode
<?xml version="1.0" encoding="utf-8" ?><configuration> <appSettings> <add key="dossier_exercices" value="C:\exo\questions"/> <add key="dossier_corrections" value="C:\exo\corrections"/> </appSettings></configuration>
La première étape consiste à charger le fichier App.Config avec la classe XDocument. Ensuite, on applique une simple requête Linq pour récupérer l’ensemble des éléments <add> comportant la clé choisie. Il suffit ensuite de récupérer l’attribut value qui est le dernier de l’élement add à travers un foreach.
Ajouter à cela quelques vérifications d’usages des valeurs passées en paramètre et un try – catch pour générer les éventuelles erreurs et le tour est joué ! Exemple de l’appel à la méthode au sein de l’application est le suivant :
String valeur = ConfigurationSettings.AppSettings("dossier_exercices")
Pour obtenir plus d’informations sur Linq je vous engage à parcourir le site msdn sur le sujet et à suivre le maître inconstesté : Anders Hejlsberg.
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
Laurent Nyffels
SmartTestLinqXML.zip (49,81 kb)