IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Lecture d'une section dans un fichier de configuration


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Par défaut Lecture d'une section dans un fichier de configuration
    Bonjour, j'aimerai avoir un fichier de configuration commun entre plusieurs application, j'ai crée un fichier comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
       <configSections>
    	<section name="MaSection" type="System.Configuration.NameValueSectionHandler" />
       </configSections>
       <appSettings>
            <add key="MaCle1" value="MaValeur1"/>
       </appSettings>
       <MaSection>
    	<add key="MaCle2" value="MaValeur2"/>
       </MaSection>
    </configuration>
    Pour lire la section "appSettings" pas de problème j'ai codé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
    configFileMap.ExeConfigFilename = @"NomDuFichier.config";
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
     
    foreach (string key in config.AppSettings.Settings.AllKeys)
    {
       Message(key + " - " + config.AppSettings.Settings[key].Value);
    }
    Mais pour plus de lisibilité je voudrai mettre mes paramètres dans différentes sections. Je n'arrive pas à lire la section "MaSection" avec le type définie. J'ai essayer ceci mais j'ai une erreur de cast impossible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameValueCollection section = (NameValueCollection)config.GetSection("MaSection");
    Erreur : Impossible de convertir le type 'System.Configuration.ConfigurationSection' en 'System.Collections.Specialized.NameValueCollection'

    Des idées ?
    Merci.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Perso j'utilise très rarement l'implémentation des fichiers de config de ce type, je ne peux que te recommander d'utiliser la serialization pour la gestion de paramètres.

    ++

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Par défaut
    Merci pour la réponse, c'est dommage car avec le fichier de conf de l'application ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NameValueCollection section = (NameValueCollection)ConfigurationManager.GetSection("MaSection");
     
    foreach (string key in section)
    {
        Message(key + " - " + section[key]);
    }
    Si je ne peux faire autrement je sérialiserai mes paramètres dans un fichier XML.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    perso, si ta configuration est partagée par plusieurs fichiers, je ferais :

    Librairie Configuration incluant une classe à sérialiser pour avoir les éléments de configuration...

    Franchement, ça sera beaucoup plus souple, rapide, efficace... et t'auras pas les problèmes de droit d'écriture sur le fichier de conf, etc...

    Bref, dès que j'ai des éléments de configuration à mémoriser, utiliser ==> Classe + Sérialisation XML... c'est beaucoup plus rapide et efficace

    et en plus, tu mets directement ton fichier XML dans ton projet si besoin !

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Par défaut
    Merci, je vais crée comme tu l'indique une class configuration, pour les cas complexes ca sera bien plus utile.

    Sinon pour répondre à la question j'ai change le type dans le fichier de conf et ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="MaSection" type="System.Configuration.AppSettingsSection" />
        </configSections>
       <MaSection>
            <add key="MaCle1" value="MaValeur1"/>
    	<add key="MaCle2" value="MaValeur2"/>
    	<add key="MaCle3" value="MaValeur3"/>
       </MaSection>
    </configuration>
    et le code C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
    configFileMap.ExeConfigFilename = @"MyConfig.config";
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
     
    AppSettingsSection maSection = (AppSettingsSection)config.GetSection("MaSection");
    foreach (string key in maSection.Settings.AllKeys)
    {
        Affiche(key + " - " + maSection.Settings[key].Value);
    }
    Ca peut être pratique pour lire quelque paramètres simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2007, 19h55
  2. Réponses: 5
    Dernier message: 22/08/2006, 10h35
  3. Comment écrire une section dans un fichier ini?
    Par Jayceblaster dans le forum Delphi
    Réponses: 5
    Dernier message: 26/06/2006, 14h08
  4. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2004, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo