App.config: Benutzer vs. Anwendungsbereich

90

Ich habe meinem Projekt die Datei App.config hinzugefügt. Ich habe zwei Einstellungen im Bereich Projekt> Eigenschaften> Einstellungen erstellt -

Geben Sie hier die Bildbeschreibung ein

Ich habe festgestellt, dass ich beim Hinzufügen einer Einstellung den Bereich als Useroder definieren kann Application. - -

  1. Benutzer
  2. Anwendung

Wenn ich die Einstellung Userfür den userSettingsAbschnitt
definiere , wenn ich die Einstellung Applicationfür den applicationSettingsAbschnitt definiere

App.config

<configuration>

    <userSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting1" serializeAs="String">
                <value>Value1</value>
            </setting>
        </DemoApp.Properties.Settings>
    </userSettings>

    <applicationSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting2" serializeAs="String">
                <value>Value2</value>
            </setting>
        </DemoApp.Properties.Settings>
    </applicationSettings>

</configuration>

Auf diese Einstellungen kann jedoch auf die gleiche Weise zugegriffen werden .cs:

Code

string mySetting1 = DemoApp.Properties.Settings.Default.MySetting1;
string mySetting2 = DemoApp.Properties.Settings.Default.MySetting2;

Was ist der Unterschied zwischen Userund ApplicationUmfang und unter welchen Umständen sollte man zwischen diesen beiden wählen?

Parag Meshram
quelle

Antworten:

72

Grundsätzlich können Anwendungseinstellungen während der Ausführung eines Programms nicht geändert werden und Benutzereinstellungen können. Diese Benutzereinstellungen sollten dann gespeichert werden, damit dem Benutzer eine vertraute Erfahrung präsentiert wird, wenn er die Anwendung als nächstes ausführt.

Bearbeiten: Beispielsweise können Sie Ihre Anwendung mit verschiedenen Modulen schreiben und müssen sicherstellen, dass Ihr Hauptmodul die richtige Version Ihres Sicherheitsmoduls verwendet. Dazu würden Sie eine Anwendungsbereichseinstellung einrichten, z. B.:

SecurityModuleVersion  string     Application      v1.21

Einige Zeit später, wenn Sie das Sicherheitsmodul umgestalten, können Sie den Wert bei der Bereitstellung in Version 1.22 ändern, um sicherzustellen, dass die richtige Sicherheit implementiert wird

Wenn Ihre Anwendung jedoch unterschiedliche "Skins" mit Farbänderungen, Schriftartenänderungen usw. hat, können Sie eine Benutzereinstellung wie die folgende einrichten:

ApplicationSkin        string     User              DefaultSkin

Wenn Michelle dann zu der Haut wechselt, die sie bevorzugt, merkt sich die Anwendung ihre Einstellungen. Die Eigenschaften können nun wie folgt aussehen:

ApplicationSkin        string     User              HelloKittySkin
mcalex
quelle
Kannst du das anhand eines Beispiels erklären?
Parag Meshram
1
Die Standardeinstellungen befinden sich in der Konfigurationsdatei, ja? Aber wo werden die gespeicherten Benutzereinstellungen gespeichert?
Kyle Delaney
7
App-Einstellungen werden in der Datei * .exe.config gespeichert. Benutzereinstellungen werden unter c: \ users \ <Benutzer-ID> \ AppData \ Local \ <Firmenname> \ <Anwendungsname> \ <Version> \ user.config gespeichert (wobei die letzteren aus der Assemblydatei abgerufen werden). Beim Laden haben Benutzereinstellungen Vorrang vor App-Einstellungen.
Schrodo_Baggins
71

Die Einstellungen für den Anwendungsbereich sind schreibgeschützt und können nur zur Entwurfszeit oder durch Ändern der Datei .exe.config zwischen Anwendungssitzungen geändert werden. Benutzerbereichseinstellungen können jedoch zur Laufzeit so geschrieben werden, wie Sie einen Eigenschaftswert ändern würden. Der neue Wert bleibt für die Dauer der Anwendungssitzung erhalten. Sie können Änderungen an den Benutzereinstellungen zwischen Anwendungssitzungen beibehalten, indem Sie die Methode Settings.Save aufrufen.

Quelle auf msdn: Verwenden der Einstellungen in C #

Benutzereinstellungen sind im Allgemeinen nützlich, um Benutzereinstellungen beizubehalten (z. B. Einstellungen für App-Benachrichtigungen usw.). Anwendungseinstellungen gelten im Allgemeinen für Elemente wie API-Schlüssel usw.

Wie von @kmote angegeben, werden Benutzereinstellungen, wenn sie zur Laufzeit (über settings.Save()) geändert und beibehalten werden, in einen Ordner im Benutzerprofilspeicher geschrieben (normalerweise C: \ Benutzer \ Benutzername \ AppData \ Local \ AppName in Windows 7 und höher) ). Um den Speicherort der Datei programmgesteuert zu bestimmen, lesen Sie bitte diesen Beitrag .

CalC
quelle
Jedes
1
Es sollte auch darauf hingewiesen werden, dass Benutzereinstellungen nicht durch Bearbeiten der .config-Datei zwischen Sitzungen geändert werden können.
kmote
@kmote Natürlich kannst du! Wenn die Sitzung geschlossen ist, können Sie die Konfiguration (und damit die Benutzereinstellung) ändern. Die Änderung bleibt bestehen und spiegelt sich im Programm wider, wenn Sie die Sitzung erneut starten ... Ich habe sie gerade getestet.
Riegardt Steyn
5
@Heliac: Ich hätte genauer sein sollen. Sie haben Recht, dass userSettings zwischen Sitzungen geändert werden können. Sobald Sie sie jedoch programmgesteuert (mit Settings.Save()) ändern , wird eine neue Konfigurationsdatei erstellt und in C: \ Users [Benutzername] \ AppData \ Local \ Microsoft ausgeblendet. Ab diesem Zeitpunkt werden bei jedem Start der Anwendung die Benutzereinstellungen ausschließlich aus dieser Datei gezogen, und alle manuell in App.config oder Settings.settings vorgenommenen Änderungen werden ignoriert.
kmote
Gibt es eine Möglichkeit, den Inhalt dieser Benutzerkonfigurationsdatei zu finden und anzuzeigen?
Kyle Delaney