107 votes

ConfigurationManager.AppSettings - Comment modifier et enregistrer?

Il pourrait sembler trop trivial de demander et je fais la même chose que ce qui est suggéré dans les articles, pourtant ça ne fonctionne pas comme prévu. J'espère que quelqu'un pourra me diriger dans la bonne direction.

Je voudrais enregistrer les paramètres utilisateur par AppSettings.

Une fois que le formulaire Windows est fermé, je déclenche ceci:

conf.Configuration config = 
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

if (ConfigurationManager.AppSettings["IntegrateWithPerforce"] != null)
    ConfigurationManager.AppSettings["IntegrateWithPerforce"] = 
                                           e.Payload.IntegrateCheckBox.ToString();
else
    config.AppSettings.Settings.Add("IntegrateWithPerforce", 
                                          e.Payload.IntegrateCheckBox.ToString());

config.Save(ConfigurationSaveMode.Modified);

Donc la première fois où l'entrée n'existe pas encore, elle la créerait simplement, sinon elle modifierait l'entrée existante. Cependant cela ne sauvegarde pas.

1) Qu'est-ce que je fais de travers ?

2) Où est-ce que j'attends que les paramètres utilisateur pour AppSettings soient de nouveau enregistrés ? Est-ce dans le dossier de débogage ou dans le dossier C:\Documents and Settings\NOM_UTILISATEUR\Local Settings\Application Data ?

75voto

Marek Points 705

Sur la façon de changer les valeurs dans la section appSettings de votre fichier app.config :

config.AppSettings.Settings.Remove(clé);
config.AppSettings.Settings.Add(clé, valeur);

fait le travail.

Évidemment, une meilleure pratique serait d'utiliser la classe Settings, mais cela dépend de ce que vous recherchez.

43voto

user1032413 Points 151

Préférez la section à la section . Il est beaucoup plus facile de lire ET d'écrire avec (Web)ConfigurationManager. ConfigurationSection, ConfigurationElement et ConfigurationElementCollection vous obligent à dériver des classes personnalisées et à implémenter des propriétés ConfigurationProperty personnalisées. Bien trop pour de simples mortels à mon avis.

Voici un exemple de lecture et écriture dans le fichier web.config :

using System.Web.Configuration;
using System.Configuration;

Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
string oldValue = config.AppSettings.Settings["SomeKey"].Value;
config.AppSettings.Settings["SomeKey"].Value = "NouvelleValeur";
config.Save(ConfigurationSaveMode.Modified);

Avant :

Après :

26voto

Dann Points 4231

Peut-être devriez-vous envisager d'ajouter un fichier de paramètres. (par exemple, App.Settings) La création de ce fichier vous permettra de faire ce qui suit:

string mysetting = App.Default.MySetting;
App.Default.MySetting = "mon nouveau paramètre";

Cela signifie que vous pouvez modifier et ensuite changer des éléments, où les éléments sont fortement typés, et ce qu'il y a de mieux... vous n'avez pas à toucher du xml avant le déploiement!

Le résultat est un paramètre contextuel d'application ou d'utilisateur.

Consultez le menu "ajouter un nouvel élément" pour le fichier de paramètres.

25voto

Omid S. Points 111

Comme la question de base concerne les formulaires Win, voici la solution : ( J'ai simplement modifié le code par l'utilisateur1032413 pour refléter les paramètres windowsForms ) Si c'est une nouvelle clé :

Configuration config = configurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings.Add("Key","Value");
config.Save(ConfigurationSaveMode.Modified);

Si la clé existe déjà :

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings["Key"].Value="Value";
config.Save(ConfigurationSaveMode.Modified);

6voto

doubleloop Points 51

N'oubliez pas que ConfigurationManager utilise uniquement un app.config - celui qui se trouve dans le projet de démarrage.

Si vous ajoutez un app.config à une solution A et y faites référence depuis une autre solution B, alors si vous exécutez B, l'app.config de A sera ignoré.

Par conséquent, par exemple, les projets de test unitaires devraient avoir leur propre app.config.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X