2009-06-11 37 views
105

Ich dachte, ich wüsste das, aber heute werde ich wieder falsch bewiesen - wieder.Wo sind die Properties.Settings.Default gespeichert?

Ausführen von VS2008, .NET 3.5 und C#. Ich fügte hinzu, die Benutzereinstellungen auf die Eigenschaften Register Einstellungen mit Standardwerten, lesen Sie sie dann in mit diesem Code:

myTextBox.Text = Properties.Settings.Default.MyStringProperty; 

Dann, nachdem der Benutzer den Wert in den Optionen bearbeitet Dialog ich es wie folgt speichern:

Properties.Settings.Default.MyStringProperty = myTextBox.Text; 
Properties.Settings.Default.Save(); 

Meine Frage ist, wo wird dieser neue Wert gespeichert? Die Datei MyApp.exe.config im ausführbaren Verzeichnis wird nicht aktualisiert, sie enthält weiterhin die Standardwerte. Soweit ich das beurteilen kann, wird auch keine der anderen Dateien in diesem Verzeichnis aktualisiert! Wie auch immer, wenn das Programm den Wert wieder einliest, bekommt es den geänderten Wert, also weiß ich, dass es irgendwo gespeichert ist ...

Dies ist nicht nur akademisch, ich musste den Wert heute Morgen manuell ändern können und Ich stolperte mich, als ich nichts finden konnte, was sich änderte.

+0

Es ist wichtig zu beachten, dass der Lagerort zwischen verschiedenen Versionen des Frameworks oder dem OS ändern kann. Programmieren Sie keine Programmatic für den Speicherort. –

+0

Wenn Sie sich im Visual Studio befinden, entwickeln Sie eine neue App, und prüfen Sie dann unter AppData \ Local \ Microsoft \ IHR ANWENDUNGSNAME Der Dateiname lautet user.config. Ich bin in Windows 7 – JenonD

Antwort

102

Um mit neueren Versionen der Windows-Richtlinie zu arbeiten, die standardmäßig nur den Lesezugriff auf den Ordner "Programme" erlaubt (es sei denn, Sie fordern eine Erhöhung mit UAC, aber das ist ein anderes Thema ...), hat Ihre Anwendung a Einstellungsordner unter %userprofile%\appdata\local oder %userprofile%\Local Settings\Application Data abhängig von der Version von Windows, die Sie ausführen, für benutzerspezifische Einstellungen. Wenn Sie Einstellungen für alle Benutzer speichern, befinden sie sich im entsprechenden Ordner unter oder C:\Documents and Settings für alle Benutzerprofile (Beispiel: C:\users\public\appdata\local).

+2

Auch die .config in Visual Studio generiert, die im Ordner der ausführbaren Datei endet, glaube ich, wird nur zum Debuggen verwendet.Wenn Sie die endgültige Anwendung zusammenpacken, fügen Sie diese .config-Datei nicht ein, da sie beim ersten Start der Anwendung generiert wird. –

+10

Neuere Versionen? Dies ist seit Windows 2000 der Fall. Sie sind gerade damit durchgekommen, weil Sie als Administrator gearbeitet haben. –

+0

Das macht es. Es macht absolut Sinn, jetzt, dass es mir erklärt wird - nicht sicher, warum ich es nicht "früher" bekommen habe, aber ... Wie auch immer, dein war die erste, vollständigste Erklärung, also bekommst du die Punkte. – DaveN59

0

Benutzerspezifische Einstellungen werden im Anwendungsdatenordner des Benutzers für diese Anwendung gespeichert. Suchen Sie nach einer user.config Datei.

Ich weiß nicht, was Sie erwartet haben, da Benutzer oft nicht einmal Schreibzugriff auf das ausführbare Verzeichnis haben.

-11

Es gibt einen Ordner namens "Eigenschaften" unter Ihrem Projekt Stammordner, und es gibt * .settings Datei unter diesem Ordner. Dort wird es gespeichert.

+6

das ist falsch. der Standardwert ist dort gespeichert nicht der Benutzer Wert geändert. –

+0

es ist richtig _during Entwicklung_. Nach der Bereitstellung gehen sie woanders hin. –

+0

Ich hatte dies in einer Entwicklungsumgebung ausgeführt und die Datei blieb unverändert. Es speichert nur den Standardwert, nicht den aktualisierten Wert. –

4

es in Ihre Dokumente und Einstellungen \% user% \ Lokale Einstellungen \ Anwendungsdaten ...... usw. für eine Datei namens user.config dort

die Lage kann jedoch die Suche gespeichert ändern.

+5

Tatsächlich ist die richtige Umgebungsvariable für benutzerspezifische Eigenschaften% userprofile%. Das Angeben von Dokumenten und Einstellungen unter Vista oder 7 führt entweder zu einem fehlenden Ordner oder zu fehlenden Berechtigungen für den gefundenen Ordner. – jasonh

55

Sie können den Pfad programmatisch erhalten:

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

Hmm, ich sehe Situationen, in denen der von diesem zurückgegebene Pfad NICHT der von den Einstellungen verwendete Pfad ist. Irgendeine Einsicht? –

+1

@GeorgeMauer Du meinst 'Roaming' oder vielleicht' LocalLow' anstatt 'Local'? 'ConfigurationUserLevel' hängt davon ab, ob das Profil des Benutzers servergespeichert oder lokal ist. In Unternehmen ist es oft Roaming. –

+0

Verknüpfen mit [diese Antwort] (http://StackOverflow.com/a/1804324/344541) und meine Kommentare darunter, zeigen, wie der Pfad aussieht. –

Verwandte Themen