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
me renvoi une exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AppSettingsReader configurationAppSettings = new AppSettingsReader(); string identifiant = (string)(configurationAppSettings.GetValue("DEMANDE", typeof(string)));
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(); } } }
J'ai essayer de rajouter la ligne :
Mais j'ai les erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Configuration config = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location);
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 ?)
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; } }
Je te conseillerais de ne pas toucher à ce fichier mais si tu veux y apporter des changements, passe par l'interface de VS.
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 !
Tu peux modifier les valeurs mais pas les clés.
Je ne cherche pas à modifié les clé, juste les valeurs.
Et bien modifie ton <value>toto</value> en <value>xyz</value> et ca ne peut que fonctioner, si tu ne modifie que cela.
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.
Fichier .config
ensuite je modifie à la main dans le fichier <value>essai</value>
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>
je fais dans le code
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AppSettingsReader configurationAppSettings = new AppSettingsReader(); string identifiant = (string)(configurationAppSettings.GetValue("DEMANDE", typeof(string)));
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)}
En page 2 je t'ai montré comment utiliser la classe Settings.
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 ?
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager