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 :

Comment faire fonctionner un fichier de config commun a plusieurs projets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Comment faire fonctionner un fichier de config commun a plusieurs projets
    bonjour,

    Je bosse sur une solution composé de 3 projets:
    1 librairie de classes
    1 projet, qui deviendra par la suite un service windows
    1 projet IHM.

    J'ai définis des paramètres de projets dans ma librairie.
    J'ai aussi crée un singleton pour que les 2 autres projets ai les mêmes valeurs de paramètres.

    Mais cela se passe très mal. cela me génère une ConfigurationErrorsException.
    voici le constructeur du Singleton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private Parametres()
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                ConnectionStringSettings chaine = ConfigurationManager.ConnectionStrings["ClientServeurLib.Properties.Settings.ChaineConnection"];
                this._chaineConnection = chaine.ToString();
                this._portServeur = Convert.ToInt32(config.AppSettings.Settings["portServeur"]);
                this._fichierLogo = config.AppSettings.Settings["Logo"].ToString();
    }
    Je pense que cela provienne du fait qu'il n'ouvre pas le bon fichier xml.

    Voici le fichier xml de la librairie de classe
    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
    23
    24
    25
    26
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="ClientServeurLib.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <connectionStrings>
            <add name="ClientServeurLib.Properties.Settings.ChaineConnection"
                connectionString="Data Source=VALFIXE\VAL;Initial Catalog=BIJOU;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
        <userSettings>
            <ClientServeurLib.Properties.Settings>
                <setting name="portServeur" serializeAs="String">
                    <value>13000</value>
                </setting>
                <setting name="IPServeur" serializeAs="String">
                    <value>192.168.11.8</value>
                </setting>
                <setting name="Logo" serializeAs="String">
                    <value>C:\Documents and Settings\Mes images\avatar_selection\big_smile.jpg</value>
                </setting>
            </ClientServeurLib.Properties.Settings>
        </userSettings>
    </configuration>
    Cela fait 3 jours que j'essaye de paramétrer les trois appli ensemble. Je diviens légèrement dingue pour ne pas dire sur les genoux.

    Y aurait-il une ame sensible pour m'éclairer, pour etre sur d'ouvrir le seul et unique fichier xml à chaque appel. Que ce soit l'ihm, ou le serveur d'écoute.

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Salut,

    je suis loin de maîtriser les fichiers de conf .Net, mais
    Citation Envoyé par touftouf57 Voir le message
    Voici le fichier xml de la librairie de classe
    Les librairies n'ont pas de fichier de conf. Si t'as une assembly A qui référence B, alors le paramètrage de B doit aussi être dans le fichier de conf de l'appli (A.exe.config). Sauf bien sûr si tu vas ouvrir un fichier à la main, mais ce n'est pas ton cas (cf ton Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

  3. #3
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    J'ai bien trouver ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     ExeConfigurationFileMap filMap = new ExeConfigurationFileMap();
                //todo voir pour etre sur de toujours pointer sur lui
                filMap.ExeConfigFilename = @"C:\Visual Studio 2008\Projects\Stage\ClientServeurLib\bin\Debug\ClientServeurLib.dll.config";
                   if (!File.Exists(filMap.ExeConfigFilename))
                {
                    return;
                }
     
                this.config = ConfigurationManager.OpenMappedExeConfiguration(filMap, ConfigurationUserLevel.None);
                this.SectappString = (ClientSettingsSection)config.GetSection("applicationSettings/ClientServeurLib.Properties.Settings");
     
                this._chaineConnection = config.ConnectionStrings.ConnectionStrings["ClientServeurLib.Properties.Settings.ChaineConnection"].ConnectionString;
                this._portServeur = Convert.ToInt32(SectappString.Settings.Get("portServeur").Value.ValueXml.InnerText);....
    Cela me permet de récupérer les données du fichier xml.
    Mais je n'arrive absolument pas à actualiser le fichier lorsque je fais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.config.Save(ConfigurationSaveMode.Modified);
    J'ai essayé les 3 énumérés sans réussite.

    La seule chose qui soit modifié c'est la connectionString, et il m'a rajouté une autre connectionString "name = localSqlServer" connectionString="data source =.\SQLEXPRESS....", dont je ne connais pas la provenance????

    J'ai lu sur le net qu'on pouvait créer un classe héritant de ConfigurationSettings, mais je voudrais éviter cela. Il me semble que tout ce qui est CLR, attributes ... fonctionnent qu'à partir du Framework 3.5. (déja que mon maitre de stage m'a demandé de descendre une appli mobile vers le Compact framework 1.0 ) je ne voudrais pas me retrouver coincé.

    Autre chose, comment je pourrais etre sur de toujours pointer vers ce fichier une fois l'installation passée.(cf todo). La le fichier est codé en dur, mais une fois installé je doute que cela soit à dans le répertoire "C:\Visual Studio...".
    J'ai déjà essayé en passant par environnement.CurrentDirectory, mais cela me donne le répertoire de l'appli "courante". Or ce fichier config, n'a pas d'exe associé. Il fait parti d'une librairie de classes, de laquelle sont dépendants les 2 autres projets.

    On peut récupérer le répertoire dans lequel a été installé le fichier? comment affecter ce chemin dans le code?

    Merci d'avance.
    Bonne nuit.

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Si je ne me trompe, toute la conf doit être dans le même fichier, celui de ton exe.

    Si ton exe et ta lib sont paramétrables, leurs projets correspondants ont chacun fichier app.config, qu'il te faut fusionner.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    C'est faisable mais comme je ne veux pas donner un fusil pour se tirer une balle dans le pied.
    L'application devrait être la seule mettre de la configuration. D'un point de vue conception, une librairie qui prend le pas sur les choix de l'application, cela me défrise.

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par bacelar Voir le message
    C'est faisable mais comme je ne veux pas donner un fusil pour se tirer une balle dans le pied.
    L'application devrait être la seule mettre de la configuration. D'un point de vue conception, une librairie qui prend le pas sur les choix de l'application, cela me défrise.
    Et pourtant, un bon paquet des modules fournis avec .Net (ADO.Net, remoting, asp.Net...) vont pécher tout seul comme des grands leur paramétrage dans le fichier de conf de l'appli.

    Le paramétrage aussi est standardisé.

Discussions similaires

  1. [Vs.Net & SQL Serveur] Comment faire fonctionner le Débu
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/08/2005, 19h23
  2. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 16h47
  3. [Chat] Comment faire fonctionner Flash 7 sous Debian ?
    Par piff62 dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 07/03/2005, 15h27
  4. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

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