2009-08-31 14 views
17

Je souhaite modifier une valeur dans la section appSetting du fichier app.config. Donc, je l'ai écrit,Modifier dynamiquement la valeur du fichier app.config

Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["name"].Value = "raja";  
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 
Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 

après l'exécution de code ci-dessus, je vérifiais la app.config si la valeur de l'élément « name » a été changé ou non. mais pas de changement.

Quel est le problème avec mon code? ou y a-t-il un autre moyen de le faire?

+2

Il ne change que dans le niveau en mémoire. il ne met pas à jour le niveau physique (au niveau du fichier) – Partha

+3

Vous ne devriez pas faire cela. Les paramètres de niveau d'application ne doivent pas être modifiés (c'est pourquoi il n'y a pas de support pour cela), mais vous devez utiliser les paramètres de niveau utilisateur à la place. –

+0

Vérifiez ce lien. Cela devrait résoudre votre problème. http://stackoverflow.com/questions/11149556/c-sharp-app-config-change-value – Indira

Répondre

1

Cela fonctionne, il suffit de regarder le dossier bin/Debug, vous regardez probablement le fichier app.config dans le projet.

+1

oui mais comment puis-je vérifier là? dans mon cas, les mêmes valeurs sont là avant la mise à jour? –

5

Vous devez mettre à jour votre fichier app.config manuellement

// Load the app.config file 
XmlDocument xml = new XmlDocument(); 
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

// Do whatever you need, like modifying the appSettings section 

// Save the new setting 
xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

Et puis dire à votre demande de recharger une section que vous avez modifié

ConfigurationManager.RefreshSection("appSettings"); 
+2

Soyez conscient de tout problème de sécurité de la mise à jour d'un fichier qui sera probablement situé dans Program Files. Sous Vista, vous avez besoin d'une autorisation élevée pour écrire dans un fichier dans Program Files. –

41

Ce code fonctionne pour moi:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.AppSettings.Settings["test"].Value = "blah";  
    config.Save(ConfigurationSaveMode.Modified); 
    ConfigurationManager.RefreshSection("appSettings"); 

Remarque: il ne met pas à jour l'élément de solution 'app.config', mais le fichier '.exe.config' dans la corbeille/f plus vieux si vous l'exécutez avec F5.

+0

Cela a aidé, merci pour la réponse. – fuzz

+0

Mec, c'est génial, T.Hanks! –

+0

Cela ne fonctionne pas. Il ne montre toujours pas que les paramètres ont été modifiés jusqu'à ce que je relance l'application. Pas sûr de ce qui se passe. –

0

Essayez:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings.Remove("configFilePath"); 
config.AppSettings.Settings.Add("configFilePath", configFilePath); 
config.Save(ConfigurationSaveMode.Modified,true); 
config.SaveAs(@"C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\ADI2v1.4\ADI2CE2\App.config",ConfigurationSaveMode.Modified, true); 
4

expansion sur l'exemple de Adis H pour inclure le cas nul (obtenu peu sur celui-ci)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["HostName"] != null) 
       config.AppSettings.Settings["HostName"].Value = hostName; 
      else     
       config.AppSettings.Settings.Add("HostName", hostName);     
      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection("appSettings"); 
Questions connexes