2010-11-18 14 views
13

Hier ist der Code Ich verwende:Konfigurationsmanager speichert keine Einstellungen

private void SaveConfiguration() 
{ 
    if (txtUsername.Text != "" && txtPassword.Text != "") 
    { 
     ConfigurationManager.AppSettings["Username"] = txtUsername.Text; 
     ConfigurationManager.AppSettings["Password"] = txtPassword.Text; 

     MessageBox.Show("Su configuracion guardo exitosamente.", "Exito!"); 
     this.Close(); 
    } 
    else 
    { 
     MessageBox.Show("Por favor lleno los campos.", "Error."); 
    } 
} 

Nun werden die Einstellungen beibehalten, aber wenn ich die Anwendung und drücken Sie F5, schließen Sie es erneut auszuführen, werden die Werte zurückgesetzt zu was in die app.config-Datei eingegeben wird. Irgendwelche Vorschläge?

+3

sollten Sie wahrscheinlich darüber nachdenken, string.IsNullOrEmpty (...) anstelle von "" zu verwenden :) –

Antwort

45

Ich glaube, Sie die Save-Methode Sie verwenden, um ein Konfigurationsobjekt zurückgegeben durch die OpenExeConfiguration Methode

ConfigurationManager.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 

EDIT

Um in der Lage sein, zu speichern

//Create the object 
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

//make changes 
config.AppSettings.Settings["Username"].Value = txtUsername.Text; 
config.AppSettings.Settings["Password"].Value = txtPassword.Text; 

//save to apply changes 
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 

nennen sollte Weitere Referenzen hier ConfigurationManager Class

+8

Es gibt keine .Save() Methode. –

+2

Um das zu erreichen, musste ich folgendes verwenden: config.AppSettings.Settings ["Benutzername"]. Value = txtUsername.Text; config.AppSettings.Settings ["Passwort"]. Value = txtPassword.Text; – Martin

+1

Ihre letzte Codezeile ist falsch. Es sollte ConfigurationManager.RefreshSection() sein. Die Konfigurationsklasse verfügt nicht über eine RefreshSection-Methode. –

27

Wenn Sie Ihre Anwendung mit F5 ausführen,

  • Code kompiliert wird,
  • die ausführbare Datei auf den bin oder bin\Debug Unterverzeichnis des Quellcodes Verzeichnis kopiert wird,
  • Ihre app.config als yourexecutable.exe.config kopiert in Dieses Verzeichnis und
  • Ihre ausführbare Datei wird in diesem Verzeichnis gestartet.

So Ihre Anwendung verwendet die yourexecutable.exe.config im bin oder bin\Debug Verzeichnis, und es ist dort die ConfigurationManager speichert die Änderungen, nicht im Quellcode-Verzeichnis. Nach der Bereitstellung der Anwendung ist dies kein Problem mehr, da Änderungen dann im Bereitstellungsverzeichnis an die Adresse yourexecutable.exe.config gesendet werden.

+0

Danke, sehr schöne Erklärung. –

+2

Und wenn Sie im Debug-Modus laufen, wird es yourexecutable.vshost.exe.config – Appetere

+0

Große Erklärung! Seit gestern habe ich mich gewundert, warum die Configs nicht in der ursprünglichen App.config-Datei gespeichert werden, bis ich dies lese. Vielen Dank! –

0

Zusätzlich zu Appetere Kommentar auf der zweiten Antwort:

Beachten Sie auch, dass, wenn Sie das Debuggen (und nicht in den vshost Prozess gesperrt), dann, wenn die Anwendung beendet, wird yourexecutable.vshost.exe.config wieder mit yourexecutable.exe.config ersetzt werden.

Also noch einmal, Sie sehen möglicherweise keine Änderungen, die Sie danach gemacht haben! (Wenn Sie während des Debuggens an einem Haltepunkt anhalten und nach dem Ändern und Aufrufen des Aktualisierungsabschnitts in der Datei nachsehen, sehen Sie Ihre Änderungen).

Dies ist sehr verwirrend, wenn Sie ein Programm debuggen, das nach einer Einstellung sucht, und wenn es nicht vorhanden ist, schreibt es. Selbst wenn Sie davor gewarnt werden, die Einstellung zu erwarten, wenn Sie das Programm zum zweiten Mal ausführen, könnte man erwarten, dass es nach dem ersten Programmlauf und VOR dem zweiten Lauf ... da ist!

Es ist nichts zu befürchten, da es nur funktioniert, wenn die Anwendung bereitgestellt oder gestartet werden direkt von ist wie andere bereits erwähnt ...

Aber es ist möglich, in eine ‚Falle‘ fallen, aber wenn Sie‘ Debuggen Sie Ihr Programm und entschließen Sie sich, die Anwendungseinstellungen zum ersten Mal zu verwenden. Um zu vermeiden, dass Sie die XML manuell schreiben, entscheiden Sie, dass Sie mit Code beginnen und das Programm dazu bringen, eine Einstellung zu schreiben füge noch mehrere hinzu.

Verwandte Themen