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 :

[C#] AppSettingsReader ne marche pas


Sujet :

C#

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par neptune Voir le message
    Et bien ca créé un fichier .settings et ca n'ajoute rien dans appSettings du fichier .config! Je comprend pas ton problème du coup.
    Ca créer un fichier Settings.cs et un fichier XML app.config
    Dans le fichier app.config il y a mes paramètres, et si je n'arrive pas a accéder à ces paramètres dans le code.

  2. #22
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par pegase06 Voir le message
    Ca créer un fichier Settings.cs et un fichier XML app.config
    Dans le fichier app.config il y a mes paramètres, et si je n'arrive pas a accéder à ces paramètres dans le code.
    En clair, je ne peux pas accéder aux paramètres du fichier app.config (renommé nom_projet.dll.config après compilation) générer par Visual Studio 2005.

    Personne n'a la solution ?

  3. #23
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Lorsque tu édites tes settings via la boite de dialogue de propriété du projet, il y a un lien "En savoir plus sur les paramètres d'application" (Learn more about application settings). As tu cliqué dessus?

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par neptune Voir le message
    Lorsque tu édites tes settings via la boite de dialogue de propriété du projet, il y a un lien "En savoir plus sur les paramètres d'application" (Learn more about application settings). As tu cliqué dessus?
    Oui je n'ai rien trouvé qui explique pourquoi le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     AppSettingsReader configurationAppSettings = new AppSettingsReader();
    string identifiant = (string)(configurationAppSettings.GetValue("DEMANDE", typeof(string)));
    me renvoi une exception.

  5. #25
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    En fait, c'est beaucoup plus simple que cela! Visual Studio génère une class proxy, comme pour les resources.Voici comment accéder à ces propriétés:

    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
     
    <?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="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <userSettings>
        <ConsoleApplication1.Properties.Settings>
          <setting name="Test" serializeAs="String">
            <value>bla bla</value>
          </setting>
        </ConsoleApplication1.Properties.Settings>
      </userSettings>
    </configuration>
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Configuration;
    using ConsoleApplication1.Properties;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string test = Settings.Default.Test;
     
                Console.WriteLine("Try to copy... and press any key.");
                Console.Read();
            }
        }
    }

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    J'ai essayer de rajouter la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Configuration config = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location);
    Mais j'ai les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'System.Configuration' est un 'espace de noms' mais est utilisé comme un 'type'
    Le type ou le nom d'espace de noms 'ConfigurationManager' n'existe pas dans la classe ou l'espace de noms 'System' (une référence d'assembly est-elle manquante ?)

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par neptune Voir le message
    En fait, c'est beaucoup plus simple que cela! Visual Studio génère une class proxy, comme pour les resources.Voici comment accéder à ces propriétés: ...
    Oui, c'est ce que j'utilisais, mais si on modifie la valeur dans le fichier app.config, ce n'est pas pris en compte.
    Ca retourne toujours la valeur entrée initialement les paramètres du projet.

  8. #28
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    C'est normal, il faut utiliser l'interface de VS. Jette un oeil au code généré:-. Si tu change la clé dans le fichier XML, il faut également changer le nom de la propriété dans la classe proxy.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:2.0.50727.832
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    namespace ConsoleApplication1.Properties {
     
     
        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
        internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
     
            private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
     
            public static Settings Default {
                get {
                    return defaultInstance;
                }
            }
     
            [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("bla bla")]
            public string Test {
                get {
                    return ((string)(this["Test"]));
                }
                set {
                    this["Test"] = value;
                }
            }
        }
    }

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par neptune Voir le message
    C'est normal, il faut utiliser l'interface de VS. Jette un oeil au code généré:-. Si tu change la clé dans le fichier XML, il faut également changer le nom de la propriété dans la classe proxy.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:2.0.50727.832
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    namespace ConsoleApplication1.Properties {
     
     
        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
        internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
     
            private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
     
            public static Settings Default {
                get {
                    return defaultInstance;
                }
            }
     
            [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("bla bla")]
            public string Test {
                get {
                    return ((string)(this["Test"]));
                }
                set {
                    this["Test"] = value;
                }
            }
        }
    }
    Je n'ai pas bien compris ce que je dois changer dans le fichier Settings.Designer.cs :

    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
    namespace Nom_dll.Properties {
     
     
        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
        internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
     
            private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
     
            public static Settings Default {
                get {
                    return defaultInstance;
                }
            }
     
            [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("in")]
            public string DEMANDE {
                get {
                    return ((string)(this["DEMANDE"]));
                }
                set {
                    this["DEMANDE"] = value;
                }
            }

  10. #30
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Je te conseillerais de ne pas toucher à ce fichier mais si tu veux y apporter des changements, passe par l'interface de VS.

  11. #31
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Mais comment je peux récupérer la valeur de ma variable modifié dans le fichier app.config ?
    Je met une valeur par défaut à la création de mon programme. A la compilation j'ai un fichier nom.dll.config.
    Je modifie ce fichier de config. J'ai uniquement accès à la valeur entrée par défaut, pas à la valeur modifié dans le fichier.
    Je n'arrive pas à récupérer la valeur.
    Je n'ai toujours pas trouvé de solution !

  12. #32
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Tu peux modifier les valeurs mais pas les clés.

  13. #33
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Je ne cherche pas à modifié les clé, juste les valeurs.

  14. #34
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Et bien modifie ton <value>toto</value> en <value>xyz</value> et ca ne peut que fonctioner, si tu ne modifie que cela.

  15. #35
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par neptune Voir le message
    Et bien modifie ton <value>toto</value> en <value>xyz</value> et ca ne peut que fonctioner, si tu ne modifie que cela.
    En modifiant la valeur directement dans le fichier nom.dll.config,je n'ai pas trouvé le code me permettant d'accéder à la valeur modifié.

    Properties.Settings.Default.NOM_CHAMPS me renvoit que la valeur initiale.

  16. #36
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Pas normal, il y a quelque chose que tu dois faire mal, montre tout le code et le fichier config sinon on y arrivera pas.

  17. #37
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Fichier .config
    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
    <?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="Transaction.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <userSettings>
            <Transaction.Properties.Settings>
                <setting name="DEMANDE" serializeAs="String">
                    <value>init</value>
                </setting>
            </Transaction.Properties.Settings>
        </userSettings>
    </configuration>
    ensuite je modifie à la main dans le fichier <value>essai</value>

    je fais dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AppSettingsReader configurationAppSettings = new AppSettingsReader();
                    string identifiant = (string)(configurationAppSettings.GetValue("DEMANDE", typeof(string)));
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {System.InvalidOperationException: La clé 'DEMANDE' n'existe pas dans la section de configuration appSettings.
       à System.Configuration.AppSettingsReader.GetValue(String key, Type type)}

  18. #38
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    En page 2 je t'ai montré comment utiliser la classe Settings.

  19. #39
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Malheureusement
    string test = Settings.Default.DEMANDE;
    me renvoi toujours la valeur "init".

    De ton coté si tu modifie manuellement la valeur et si tu récupère la variable, c'est la valeur modifié ("essai") que tu obtiens ?

  20. #40
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Oui, c'est pour çà que je ne comprend pas!

    Rassure moi, tu fait ce test sur ton executable compilé hors environement de dev?

    EDIT: je te met mon application de test
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  2. Maximiser fenêtre ne marche pas
    Par sandrinec dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/06/2003, 12h02
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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