Valeur de modification App.Config

Ceci est mon App.Config

      

Avec ce code je fais le changement

 lang = "Russian"; private void Main_FormClosing(object sender, FormClosingEventArgs e) { System.Configuration.ConfigurationManager.AppSettings.Set("lang", lang); } 

Mais ça ne change pas. Qu’est-ce que je fais mal?

    Vous ne pouvez pas utiliser d’object statique AppSettings pour cela. Essaye ça

     ssortingng appPath = System.IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().Location); ssortingng configFile = System.IO.Path.Combine(appPath, "App.config"); ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); configFileMap.ExeConfigFilename = configFile; System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); config.AppSettings.Settings["YourThing"].Value = "New Value"; config.Save(); 

    AppSettings.Set ne conserve pas les modifications apscopes à votre fichier de configuration. Cela change juste en mémoire. Si vous placez un point d’arrêt sur System.Configuration.ConfigurationManager.AppSettings.Set("lang", lang); et ajoutez une surveillance pour System.Configuration.ConfigurationManager.AppSettings[0] Vous verrez qu’il passera de “Anglais” à “Russe” lorsque cette ligne de code sera exécutée.

    Le code suivant (utilisé dans une application console) persistera dans la modification.

     class Program { static void Main(ssortingng[] args) { UpdateSetting("lang", "Russian"); } private static void UpdateSetting(ssortingng key, ssortingng value) { Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); configuration.AppSettings.Settings[key].Value = value; configuration.Save(); ConfigurationManager.RefreshSection("appSettings"); } } 

    De ce post: http://vbcity.com/forums/t/152772.aspx

    Un point important à noter avec ce qui précède est que si vous exécutez ceci à partir du débogueur (dans Visual Studio), le fichier app.config sera écrasé à chaque fois que vous construisez. Le meilleur moyen de tester ceci est de créer votre application, puis d’accéder au répertoire de sortie et de lancer votre exécutable à partir de celui-ci. Dans le répertoire de sortie, vous trouverez également un fichier nommé YourApplicationName.exe.config, qui est votre fichier de configuration. Ouvrez-le dans le Bloc-notes pour voir que les modifications ont bien été enregistrées.

    Lorsque vous utilisez ” ConfigurationUserLevel.None “, votre code est exécuté correctement lorsque vous cliquez sur nomvotreapp.exe dans le dossier de débogage. .
    mais quand votre application en développement sur Visual Stdio ne fonctionne pas correctement !! parce que “vshost.exe” est exécuté.

    paramètre suivant résoudre ce problème: ” Application.ExecutablePath

    essayez ceci: (Testé dans VS 2012 Express For Desktop)

     Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); config.AppSettings.Settings["PortName"].Value = "com3"; config.Save(ConfigurationSaveMode.Minimal); 

    mon anglais n’est pas bon, je suis désolé.

    Cela a fonctionné pour moi dans l’application WPF:

     ssortingng configPath = Path.Combine(System.Environment.CurrentDirectory, "YourApplication.exe"); Configuration config = ConfigurationManager.OpenExeConfiguration(configPath); config.AppSettings.Settings["currentLanguage"].Value = "En"; config.Save(); 
      private static ssortingng GetSetting(ssortingng key) { return ConfigurationManager.AppSettings[key]; } private static void SetSetting(ssortingng key, ssortingng value) { Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); configuration.AppSettings.Settings[key].Value = value; configuration.Save(ConfigurationSaveMode.Full, true); ConfigurationManager.RefreshSection("appSettings"); } 

    En plus de la réponse de fenix2222 (qui a fonctionné pour moi), j’ai dû modifier la dernière ligne pour:

     config.Save(ConfigurationSaveMode.Modified); 

    Sans cela, la nouvelle valeur était toujours en cours d’écriture dans le fichier de configuration, mais l’ancienne valeur était récupérée lors du débogage.

    Pour une application console .NET 4.0, aucune de ces solutions ne fonctionnait pour moi. J’ai donc modifié la réponse de Kevn Aenmey comme ci-dessous et cela a fonctionné:

     private static void UpdateSetting(ssortingng key, ssortingng value) { Configuration configuration = ConfigurationManager. OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); configuration.AppSettings.Settings[key].Value = value; configuration.Save(); ConfigurationManager.RefreshSection("appSettings"); } 

    Seule la première ligne est différente, construite sur l’assemblage en cours d’exécution.

    Merci Jahmic pour la réponse. A bien fonctionné pour moi.

    Un autre extrait de code utile qui lit les valeurs et renvoie une chaîne:

     public static ssortingng ReadSetting(ssortingng key) { System.Configuration.Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); System.Configuration.AppSettingsSection appSettings = (System.Configuration.AppSettingsSection)cfg.GetSection("appSettings"); return appSettings.Settings[key].Value; }