web-dev-qa-db-fra.com

C # Settings.Default.Save () ne pas enregistrer?

ce bug est assez inhabituel. Fondamentalement, mon code va changer le Settings.Default.Example puis sauvegarder et redémarrer le programme. Puis, quand il charge, il affiche une boîte de message. Cependant, curieusement, il affiche une valeur vide lors du chargement du formulaire.

Voici mon code:

Main.cs
    private void Button1_Click(object sender, EventArgs e)
    {
        Settings.Default.Example = "Somevalue"; //Sets a value to the settings
        Settings.Default.Save(); // Save it
        MessageBox.Show(Settings.Default.Example); //Confirming it has been saved
        Application.Restart();
    }

    private void Main_Load(object sender, EventArgs e)
    {
        MessageBox.Show(Settings.Default.Example); // Here is the weird part, it shows empty.
    }

La MessageBox affichera "Somevalue" lorsque le bouton sera cliqué, puis l'application redémarrera et la MessageBox affichée sera vide. Cependant, répéter le processus en cliquant une fois de plus sur le bouton puis en le redémarrant indique la "variable" MessageBox. S'il vous plaît aider! Merci beaucoup!

17
user1494994

Vous avez peut-être commis la même erreur que moi: définir le paramètre scope surApplication. Ces types de paramètres sontpas enregistrés .

Réglez-le surUserpour résoudre le problème.

34
David Rettenbacher

rene est correct - vous devez appeler Default.Reload après avoir appelé la méthode Save:

Settings.Default.Save();
Settings.Default.Reload();

Peut-être un bug -?

Poster en réponse pour augmenter la visibilité -

4
MaurGi

Après une journée complète de recherche et d'étude sur le sujet, j'ai pu résoudre ce problème en mettant la configuration à la disposition de l'utilisateur:

Using System.Configuration; 

Properties.Settings.Default.strinconn = txt_stringconn.Text;
Properties.Settings.Default.Save ();
Properties.Settings.Default.Upgrade ();
MessageBox.Show ("Saved Settings");
Application.Restart ();
4
Bruno Felipe Kouuds

Attention à ne pas appeler

Settings.Default.Reload();

après chacun

Settings.Default.Save();

La fonction Save () enregistre vos modifications dans le fichier mais n’est pas reflétée dans votre code en cours d’exécution. Ainsi, votre code conserve la copie de la version précédente du fichier. 

Lorsque vous appelez Save () à un autre emplacement dans votre code, il enregistre votre première modification, rétablissant ainsi votre première modification sur sa valeur d'origine . Très difficile à cerner, même lors du débogage. 

1
AtillaBaspinar

Si votre fichier AssemblyInfo.cs a un * dans la version d'assemblage, il est actualisé à chaque génération afin que vous ne voyiez plus la persistance ou la fiabilité tant que vous n'avez pas changé ce nombre et que vous avez tout reconstruit, puis tout retesté.

1

Si vous avez besoin de tester votre application, comment travailler réellement dans ce cas, il est préférable de lancer le fichier exe. Lorsque vous exécutez Visual Studio en mode débogage, l'enregistrement de ces paramètres prend un certain temps. Allez dans le dossier de débogage et exécutez le fichier exe, vous obtiendrez les messages comme prévu.

0
Damith

S'il vous plaît jeter un oeil à cette question

Surtout, essayez le code suivant à partir d'une réponse:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

En outre, consultez cet aperçu , peut-être avez-vous rencontré une limitation qui n’est pas facile à identifier à partir de votre question.

Cet article codeproject pourrait être utile.

0
Mare Infinitus

avez-vous essayé d'appeler ConfigurationManager.RefreshSection avant de vérifier qu'il avait été enregistré, vous pouvez le réessayer après le rechargement

0
Scott Selby