2012-07-15 6 views
10

Ich möchte einige Einstellungen in einer Konfigurationsdatei für die zukünftige Verwendung speichern. Ich versuche, den regulären Code zu verwenden, die ich auf allen Tutorials sehen -C# - App-Konfiguration ändert sich nicht

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["username"].Value = m_strUserName; 

// I also tried - 
//config.AppSettings.Settings.Remove("username"); 
//config.AppSettings.Settings.Add("username", m_strUserName); 

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

jetzt - das kann ich zur Laufzeit sehen - die Datei „... vshost.exe.config“ auf ‚Debug‘ Ordner ist Änderungen, Nuss wenn ich meine Anwendung schließe - alle Änderungen werden gelöscht. Was kann ich tun?

Antwort

28

Um mit der normalen Konfigurationsdatei der exe zu testen, deaktivieren Sie das Kontrollkästchen für "Visual Studio Hosting-Prozess aktivieren" auf der Registerkarte "Debug" im Projekteigenschaften-Menü. Dadurch wird Visual Studio nicht mehr die Datei vshost.exe zum Starten verwenden und die richtige Konfigurationsdatei wird verwendet.

enter image description here

+0

+1 Gute Antwort Scott, aber ich ziehe es vor, es zu vermeiden, weil ich dazu tendiere, diese kleine Flagge zu vergessen und manchmal sind die Folgen sehr ärgerlich. http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx – Steve

+0

Was ist der Unterschied zwischen vshost und der realen Datei? Warum ist es so wichtig, die Flagge zu benutzen? – TamarG

+0

Lesen Sie den Link steve in seinem Kommentar zur Verfügung gestellt, es erklärt, was der vshost-Prozess ist. –

9

Wenn Sie Ihre Anwendung für Ihre Endbenutzer bereitstellen, gibt es keine vshost.config.
Ihre Änderungen werden auf die reale exe.config angewendet. Du musst dir deswegen keine Sorgen machen.

Wenn Sie Ihre Anwendung in einer Debugsitzung erstellen, wird die Datei app.config, die in Ihrem Projekt vorhanden ist, in das Ausgabeverzeichnis kopiert. Dann wird diese Konfigurationsdatei ebenfalls in vshost.config kopiert. Auf diese Weise überschreibt der Inhalt von app.config alle Änderungen, die während einer Debugsitzung in der vshost.exe.config vorgenommen wurden.

Lassen Sie mich jedoch sagen, dass das Schreiben dieser Art von Informationen in eine Anwendungskonfiguration eine schlechte Praxis ist. Die Konfigurationsdatei sollte nur zum Speichern permanenter Konfigurationen verwendet werden, die sich normalerweise während der Lebensdauer Ihrer Anwendung nicht ändern. Verbindungseinstellungen sind beispielsweise gültige Informationen, die dort gespeichert werden, weil Sie diese normalerweise nicht ändern und Sie sie nicht hart codieren möchten.

Einstellungen wie der Benutzername sollten stattdessen user.config verwenden. Diese Konfiguration ist pro Benutzer/pro App und ermöglicht Lese-/Schreibzugriff.

+0

aber ich muss es jetzt debuggen ... und warum die vshost.config speichern die Änderungen nicht? – TamarG

+0

@tamarg Sie können @ Steves Antwort testen, indem Sie den Ordner "\ bin" in Ihrem Ordner "\ Debug" öffnen und die ausführbare Datei manuell ausführen. Sie müssen daran denken, dass der Debug-Prozess jedes Mal von denselben temporären Dateien startet. –

+0

Ich habe vielleicht auch geantwortet, aber ich gebe +1 zu diesem! –