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 :

récupérer une section d'un fichier de configuration d'un autre projet


Sujet :

C#

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut récupérer une section d'un fichier de configuration d'un autre projet
    Bonjour,

    j'aimerais, depuis un projet, pouvoir récupérer une section d'un fichier de configuration qui se trouve dans un autre projet.

    ConfigurationManager.GetSection() ne fonctionne que si le fichier de configuration est dans le projet courant et ne me conviens donc pas.

    Auriez-vous une solution à me proposer ?

    Merci d'avance pour votre aide.

    mathmax

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par maa Voir le message
    Bonjour,

    j'aimerais, depuis un projet, pouvoir récupérer une section d'un fichier de configuration qui se trouve dans un autre projet.

    ConfigurationManager.GetSection() ne fonctionne que si le fichier de configuration est dans le projet courant et ne me conviens donc pas.

    Auriez-vous une solution à me proposer ?

    Merci d'avance pour votre aide.

    mathmax
    Directement récupérer et éditer le fichier de configuration ?

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Comme dit par ced600, tu récupères et tu parses le XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlDocument doc = new XmlDocument();
    doc.Load("c:\fichier.conf");

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.Load(@"c:\fichier.conf");
    Pour éviter les petit soucis

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Voici la méthode que je me suis créé, c'est bien mieux à mon sens que de déployer le parseur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /// <summary>
            /// Lire une valeur dans le fichier de config d'un exe
            /// </summary>
            /// <param name="exeFile"></param>
            /// <param name="key"></param>
            public static object ReadAppSettingOfFile(string exeFile, string key)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(exeFile);
                AppSettingsSection section = config.GetSection("appSettings") as AppSettingsSection;
     
                if (section.Settings[key] != null)
                    return section.Settings[key].Value ;
                else
                    return null;
            }

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par _skip Voir le message
    Voici la méthode que je me suis créé, c'est bien mieux à mon sens que de déployer le parseur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /// <summary>
            /// Lire une valeur dans le fichier de config d'un exe
            /// </summary>
            /// <param name="exeFile"></param>
            /// <param name="key"></param>
            public static object ReadAppSettingOfFile(string exeFile, string key)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(exeFile);
                AppSettingsSection section = config.GetSection("appSettings") as AppSettingsSection;
     
                if (section.Settings[key] != null)
                    return section.Settings[key].Value ;
                else
                    return null;
            }
    Exact, ma méthode à moi, c'est quand on veut modifier le fichier de config. Mais juste pour le lire il est plus simple avec ConfigurationManager.

  7. #7
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Mais ici aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            /// <summary>
            /// Ecrire une valeur dans le fichier de config d'un exe
            /// </summary>
            /// <param name="exeFile"></param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void ModifyAppSettingOfFile(string exeFile, string key, object value)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(exeFile);
                AppSettingsSection section =  config.GetSection("appSettings") as AppSettingsSection;
     
                if (section.Settings[key] != null )
                    section.Settings[key].Value = value.ToString();
                else
                    section.Settings.Add(key, value.ToString());
     
                config.Save();
            }
    Ca fonctionne nikel, je m'en sers en fait pour pouvoir gérer la configuration des différents modules et composants de mon système de gestion d'entreprise depuis une seule interface.

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    J'avais pourtant essayé il y a pas longtemps justement et impossible de modifier le fichier de config. Alors j'ai contourné en utilisant le parser XML.

    C'était peut-être parce que j'essayais de modifier le fichier de config de mon appli.

  9. #9
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ce qui est surprenant et qui m'a fait croire au début que c'était impossible, c'est que si tu utilises directement la propriété AppSettings de Configuration, tout ce que tu obtiens est en readonly.

    Par contre en passant par un GetSection("appSettings"), tout est accessible. J'ai pas bien compris pour quoi moi non plus.

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par _skip Voir le message
    Ce qui est surprenant et qui m'a fait croire au début que c'était impossible, c'est que si tu utilises directement la propriété AppSettings de Configuration, tout ce que tu obtiens est en readonly.

    Par contre en passant par un GetSection("appSettings"), tout est accessible. J'ai pas bien compris pour quoi moi non plus.
    Ah c'était peut-être ça, j'étais passé par les propriétés appSettings et connectionStrings, donc si ça fonctionne avec GetSection c'est bien mais c'est bizarre. En tout cas merci.

  11. #11
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Merci pour vos réponses.

    Le problème est que je ne connais pas le chemin de mon exécutable (il change tout le temps). Je sais pas si c'est possible, mais j'aimerais récupérer le fichier de configuration de l'assembly appelante (Assembly.GetCallingAssembly()).

  12. #12
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly.GetCallingAssembly().Location
    Non ?

  13. #13
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Ca marche merci.

  14. #14
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    J'ai un problème en fait :

    Le projet dans lequel se trouve le fichier de configuration est en fait un projet VSTO. Ce qui est bizarre, c'est que Assembly.GetCallingAssembly().Location me retourne ce chemin :

    C:\Documents and Settings\MAA\Local Settings\Application Data\assembly\dl3\CO1GZZPQ.ZDP\1CEZJ26B.335\3e12b457\56e71895_6f6ac801\MonProjet.DLL

    Lorsque j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConfigurationManager.OpenExeConfiguration(configAssembly.Location);
    un objet Configuration est bien crée, mais la propriété HasFile est false. En effet, il n'y a pas de fichier "MonProjet.DLL.config" dans le répertoire "C:\Documents and Settings\MAA\Local Settings\Application Data\assembly\dl3\CO1GZZPQ.ZDP\1CEZJ26B.335\3e12b457\56e71895_6f6ac801\".
    Pourtant il y en a bien un dans le répertoire "bin\debug" de MonProjet...

    Du coup mon objet config ne contient pas les sections que j'avais ajouté dans le fichier de configuration de mon projet.
    Savez-vous pourquoi Assembly.GetCallingAssembly().Location me renvois ce chemin bizarre et pourquoi le fichier .dll.config n'est pas recopié dans le même répertoire ?

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    peut être que ce répertoire temporaire est utilisé pour les exécution du programme, et qu'à la fin de l'éxecution il est supprimé ?

  16. #16
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    oui mais pourquoi le fichier de configuration n'y est pas recopié ?

  17. #17
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    sais pas

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

Discussions similaires

  1. Parcourir une section d'un fichier
    Par riadhz dans le forum MFC
    Réponses: 1
    Dernier message: 18/09/2006, 08h36
  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. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32

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