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#

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    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 émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    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 habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    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 émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    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 éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    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 émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    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é.
    ಠ_ಠ

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    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.
    C'est justement le contenu de ma remarque, c'est dans le fichier de configuration de l'APPLICATION et non dans celui d'une assembly.

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Ok, merci pour vos commentaires.

    Mais alors que me conseillez vous de faire??

    J'aurais le serveur d'écoute sur une machine.

    L'appli lourde (IHM) installer sur un autre PC, ou peut-être sur la même machine.

    L'IHM, devra pouvoir faire l'administration du serveur d'écoute.
    Les paramètres seront des paramètres d'appli (port d'écoute, adresse IP serveur, plus toute une ribambelle de paramètres annexes).

    Et le tout capable de tourner sur le Framework 2.0 (certains clients ne veulent pas passer au 3.5, le client est roi).

    Vous auriez un bout de code, précisant, la méthodologie à appliquer.

    Ou bien comment je dis d'une appli à l'autre que le fichier de config se trouve à tel endroit!!

    En tout cas merci pour vos remarques.

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pourquoi le client et le serveur doivent-ils partager la même configuration ?

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Le client est le serveur se partagent la même config parce que CE client aura un role d'administration de "l'écouteur" et ils partagent la même connection String.

    A coté de cela j'aurais des terminaux mobiles wifi. Vu la rapidité de la transmission sans fil (environ 6 secondes entre l'émission du terminal et la réception sur l'écouteur). Je préfère attaquer la base de données en direct de l'IHM, sans passer par l'écouteur.

    Est-ce un mauvais choix d'architecture?? Que me conseilles-tu de faire?

  11. #11
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    Bon j'espère que j'ai bien compris ce que tu veux faire et voici peut être une autre solution :

    T'est pas obligé a utiliser le framework .NET pour gérer la configuration, je m'explique, tu peux par exemple utiliser une base de données SQLLite (par retour d'expérience, ça marche nickel) ou tu sotck dedans toute ta config,et ensuite mettre cette base de données dans un répertoire systéme partagé style : Application Data\tonapplication et basta.

    Non ?

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Je vais essayé de faire autrement. C'est à dire de lancer le serveur d'écoute à partir de l'IHM. Cela règlera le problème de config (du moins je l'éspère ).

    Cependant cela soulève une autre question, comment savoir si l'application serveur n'est pas déjà lancée? Puisque l'écouteur devra tourné quasiment de façon permanente, alors que l'IHM non.

    Je me suis dit que puisque l'IHM contiendra les paramètres, la solution, à laquelle j'ai pensée, dites mois si je fais fausse route, serait d'essayé d'envoyer un message au serveur, et s'il y le message part c'est que le serveur est actif.
    Je trouve ça un peu tiré par les cheveux, mais je n'ai trouvé que cela. Y aurait-il mieux??

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Process.GetProcessesByName ?
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  14. #14
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    Ma solution ne t'as pas plu, parcque je croix que tu te complique les choses

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