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 :

Acces app.config - solution multiprojets


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Acces app.config - solution multiprojets
    En règle générale à partir d'une classe j'accède au app.config de mon application via ConfigurationManager.AppSettings["mykey"]. Ce qui me retourne la valeur de "mykey". Cela fonctionne parfaitement lorsque j'ai un seul projet dans ma solution.

    Auparavant pour créer une dll et l'application qui l'utilise j'ouvrais deux visual studio... un ou je créais ma dll et l'autre ou je créais mon appli qui utilisait ma dll, je ne trouvais pas ca très pratique... J'ai donc créé une solution avec deux projets, un pour ma dll et un pour l'appli. Dans le projet de ma dll j'ai rajouté un fichier de config app.config et une classe Database. Dans le constructeur j'ai rajouté un simple MessageBox qui m'affiche la valeur d'une clé de mon app.config... problème, lorsque je crée une instance de ma classe Database à partir de mon appli la valeur de ma clé n'est pas retourné (null).

    Pour être plus clair quelques extraits de code et ma solution :

    ma solution :



    le app.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Micros" value="Sybase9"/>
      </appSettings> 
    </configuration>
    le code du bouton de frmMain créant une instance de Database :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void button1_Click(object sender, EventArgs e)
            {
                LVClassLib.Database db = new LVClassLib.Database();
            }
    La classe Database :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Database
        {
            public Database()
            {
                MessageBox.Show(ConfigurationManager.AppSettings["Micros"]);
            }
     
        }
    Lorsque je clique sur le bouton ConfigurationManager.AppSettings["Micros"] me renvoie null et le message de messagebox est donc vide alors que pour moi cela devrait m'afficher "Sybase9".

    Merci d'avance pour votre aide.

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Alors en fait :

    • tu as une assembly A (la DLL) qui dispose d'un fichier appA.config
    • tu as une assembly B (ton form) qui dispose d'un fichier appB.config
    • cette assembly B fait référence à l'assembly A

    Ce qu'il se passe : le code de l'assembly A exécute l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConfigurationManager.AppSettings["mykey"]
    mais va chercher la clé dans le app.config de l'assembly B (appB.config) Les DLLs partagent le fichier de configuration de l'EXE en cours d'utilisation. Je ne suis pas capable de t'expliquer le pourquoi du comment d'un point de vue théorique mais ayant été confronté au même cas il y a peu, c'est ce que j'avais pu constater .

    Donc si tu veux que ta DLL gère sa propre configuration, tu ne peux pas utiliser le mécanisme natif des app.config, tu vas être obligé de créer un XML à la main et d'implémenter ton parser maison au sein de la DLL, et de livrer ce fichier avec la DLL (ou le mettre en embedded)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par eusebe19 Voir le message
    Donc si tu veux que ta DLL gère sa propre configuration, tu ne peux pas utiliser le mécanisme natif des app.config, tu vas être obligé de créer un XML à la main et d'implémenter ton parser maison au sein de la DLL, et de livrer ce fichier avec la DLL (ou le mettre en embedded)
    Merci pour ton explication parfaitement claire. C'est pas génial comme système, ils auraient pu quand même prévoir ce cas qui doit être plutôt courant !

    En faisant d'autres recherches sur le forum je suis tombé sur ce topic http://www.developpez.net/forums/d60...vice-possible/. Je vais jeter un oeil à ce OpenExeConfiguration voir si je peux faire quelque chose avec ça, oui je sais je suis têtu Je vais essayer de me prendre la tête un peu sur le problème, si je ne trouve pas d'autre solution je me résoudrais à la création d'un xml et l'implémentation d'un parser mais ca ne m'emballe pas plus que ca par contre ton histoire d'embedded je n'ai pas tout compris... comment ça mettre le fichier de config en embedded ?

  4. #4
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par koktel_dfr Voir le message
    par contre ton histoire d'embedded je n'ai pas tout compris... comment ça mettre le fichier de config en embedded ?
    Ça c'est juste un détail, disons que deux des possibilités qui s'offrent à toi avec ce genre de fichier sont les suivantes :

    • tu ne changes pas la propriété "Build Action" du fichier et il se trouve en dehors de la DLL ;
    • tu mets cette propriété à "Embedded Resource" et le fichier est inclus dans la DLL, et donc l'utilisateur final ne voit pas ce fichier (et il ne peut pas modifier la configuration ).

    Voilà

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par eusebe19 Voir le message
    Les DLLs partagent le fichier de configuration de l'EXE en cours d'utilisation.
    Je confirme. Les fichiers app.config ne servent à rien pour les DLLs...

    Citation Envoyé par eusebe19 Voir le message
    Donc si tu veux que ta DLL gère sa propre configuration, tu ne peux pas utiliser le mécanisme natif des app.config, tu vas être obligé de créer un XML à la main et d'implémenter ton parser maison au sein de la DLL, et de livrer ce fichier avec la DLL (ou le mettre en embedded)
    Pas forcément... il suffit de mettre les données de configuration de la lib dans l'app.config de l'exe. Une méthode fréquemment utilisée est de créer une section de configuration personnalisée pour la librairie, de façon à isoler les paramètres destinées à la lib des autres paramètres. C'est ce qui est fait par exemple dans NHibernate ou log4net

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par eusebe19 Voir le message
    Ça c'est juste un détail, disons que deux des possibilités qui s'offrent à toi avec ce genre de fichier sont les suivantes :

    • tu ne changes pas la propriété "Build Action" du fichier et il se trouve en dehors de la DLL ;
    • tu mets cette propriété à "Embedded Resource" et le fichier est inclus dans la DLL, et donc l'utilisateur final ne voit pas ce fichier (et il ne peut pas modifier la configuration ).

    Voilà
    Très intéressant, je ne savais même pas que ca existait ! Ce n'est pas forcément approprié pour mon projet car le fichier de config doit pouvoir être modifiable mais ca doit pouvoir être très utile dans d'autres cas, je garde donc ça au chaud...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Pas forcément... il suffit de mettre les données de configuration de la lib dans l'app.config de l'exe. Une méthode fréquemment utilisée est de créer une section de configuration personnalisée pour la librairie, de façon à isoler les paramètres destinées à la lib des autres paramètres
    Bonne idée la section de configuration personnalisée... si je ne trouve pas mieux je crois que je vais opter pour cette solution.

    Sinon j'ai trouvé ça : http://www.codeproject.com/KB/dotnet/dllappconfig.aspx mais le niveau est un peu élevé pour moi, j'ai un peu du mal à tout comprendre...

Discussions similaires

  1. Solution multiprojets: utilisation du web.config
    Par joujou_le_fou dans le forum Services Web
    Réponses: 1
    Dernier message: 07/09/2011, 17h05
  2. probleme WPF acces a app.config
    Par karim612 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 26/08/2010, 16h28
  3. Réponses: 0
    Dernier message: 20/05/2010, 10h46
  4. [C#][VS2K5]Acces au fichier App.Config en lecture / écriture
    Par gassisprog dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/05/2008, 15h17
  5. [VB.NET] Recuperer un paramettre avec App.Config
    Par Monster77 dans le forum Windows Forms
    Réponses: 21
    Dernier message: 31/12/2007, 14h06

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