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 :

fichier de configuration pour une library


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 fichier de configuration pour une library
    Bonjour,

    J'ai un projet "MyProject" qui contient une référence à une librairie. Dans cette librairie, j'ai un fichier de configuration (app.config). Lorsque je compile "MyProject", j'aimerai que le fichier de configuration (*.dll.config) soit copié dans le répertoire bin, de façon à ce que je puisse modifier les paramètres de configuration pour l'application.
    Une autre solution qui me conviendrait aussi serait que les information de configuration de la librairie soit copié dans le fichier MyProject.exe.config.

    Quelles solutions me proposez-vous pour ce problème ?

    Merci
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  2. #2
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux ajouter une action de post-compilation (dans les propriétés du projet) pour copier le fichier de conf de la dll vers le répertoire de sortie

  3. #3
    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 c'est une copie qui n'est pas prise en compte par la dll de la librairie. Si je modifie les paramètre de la copie de ce fichier de configuration, rien ne change.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  4. #4
    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
    Une idée pour ce problème ?
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 52
    Points
    52
    Par défaut
    La copie post compilation est une bonne idée.
    Rien ne change quand tu modifie le fichier de configuration de la dll et c'est normal.

    L'application ne va lire qu'un seul fichier de configuration qui portera son nom + ".config"

    Ton fichier de configuration de ta dll sera complètement ignoré sauf si tu y accède "à la main" (de préférence depuis la dll concernée).

    Il faut effectivement que tu ouvre manuellement le fichier de configuration de la dll pour charger le nécessaire car l'automatisme .Net est réservé au fichier de configuration de l'application courante.

  6. #6
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Je suis sur le même problème, et je comprends bien qu'il n'y ait qu'un seul fichier .config qui est le .exe.config pris en compte.

    Par contre, où passent les settings définit dans les .config des dll? On ne peut plus les modifier via un fichier .config? Et est-ce que ça a de l'importance si la dll est une dll externe ou un projet dans la solution Visual Studio?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 52
    Points
    52
    Par défaut
    Ils sont complètement ignorés que la library soit externe ou pas.

  8. #8
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Donc ils sont inclus dans la dll de manière à ce que le code de la dll puisse accéder aux valeurs, mais il est impossible de modifier ces valeurs?

    Dans ce cas, je vais continuer d'utiliser mon propre module de settings...

    Merci de la réponse !

  9. #9
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 52
    Points
    52
    Par défaut
    non pas du tout en fait c'est tout simple. Lorsqu'un fichier de configuration est cré, il y a un automatisme qui fait que dans la dll, les valeurs au moment de la génération soit conservées dans le cas ou le fichier de configuration soit introuvable (valeurs dites par défaut).

    Ce valeurs sont donc présente au lancement. Ensuite le programme recherche le fichier de configuration. Mais comme c'est le fichier de configuration de l'application qui est pris en compte, les valeurs qui etaient dans le fichier de conf de la dll sont introuvable et donc le programme conserve les valeurs par défaut.

    Lorsque tu change les valeurs du fichier de conf de la dll, rien ne change car de toute facon le fichier n'est jamais consulté.

    Le moyen que j'utilise est donc l'ouverture manuelle du fichier.

  10. #10
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Et il n'y a pas un moyen de mettre les paramètres de la dll dans le fichier de config de l'application afin qu'il prenne ceux-ci en lieu et place des valeurs par défaut? L'idée est qu'au moment de la recherche du fichier de configuration, les valeurs recherchées soit présentes, même si ce n'est pas le fichier de configuration de la dll...

  11. #11
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 52
    Points
    52
    Par défaut
    Si, tu peux crée une clef personalisée dans le fichier de configuration et y accèder depuis la dll sans problème, mais je ne trouve pas ca très propre au niveau architecture. De plus tu n'y gagne pas grand chose puisque la mise à jour du code via les valeur personalisées se feront manuellement.

  12. #12
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Ok... Donc finalement, le mieux reste le module de settings perso !

    Merci des infos !

  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
    Je me suis fais une classe de base pour les classes Settings d'une library.

    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
    20
    21
    22
     
        public abstract class LibrarySettings : global::System.Configuration.ApplicationSettingsBase
        {
            protected LibrarySettings()
            {
                var properties = this.GetType().GetProperties().Where(y => y.GetCustomAttributes(typeof(UserScopedSettingAttribute), false).Length > 0).ToArray();
     
                string assemblyName = Assembly.GetAssembly(this.GetType()).GetName().Name;
     
                string configFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
                                                    string.Concat(assemblyName, ".dll.config"));
     
                var xdoc = XDocument.Load(configFileName);
                var configSection = xdoc.XPathSelectElement(string.Format("configuration/userSettings/{0}.{1}", assemblyName, this.GetType().Name));
                foreach (var setting in configSection.Elements("setting"))
                {
                    var property = properties.Where(y => y.Name == setting.Attribute("name").Value).FirstOrDefault();
                    if (property != null)
                        property.SetValue(this, Convert.ChangeType(setting.Element("value").Value, property.PropertyType), null);
                }
            }
        }
    Ce que j'ai donc à faire :
    - j'ajoute un item Settings1.settings nomralement
    - dans Settings1.designer.cs, je remplace le nom de la classe de base par LibrarySettings
    - j'ajoute une option post-compilation pour recopier le fichier .dll.config dans le répertoire de sortie de mon application.

    Je peux maintenant modifier les valeur du fichier de configuration et celles-ce sont prises en compte par la dll.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

Discussions similaires

  1. Fichier de configuration pour une connexion à une base de données
    Par prorace dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 06/06/2011, 13h51
  2. Réponses: 0
    Dernier message: 04/08/2008, 16h07
  3. Faire un fichier de configuration pour des scripts
    Par gene69 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 23/06/2006, 23h59
  4. Réponses: 1
    Dernier message: 20/06/2006, 15h11

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