Was ist der Unterschied zwischen der Datei app.config und der Datei XYZ.settings?

72

Ich bin gerade in der Lernphase von .NET-bezogenen Dingen und habe untersucht, wie die Anwendung gespeichert werden kann. Am Ende habe ich meine eigene Klasse geschrieben, die die Einstellungen in einer XML-Datei speichert, und dann festgestellt, dass .NET selbst das Speichern von Anwendungseinstellungen unterstützt.

Aber ich habe zwei Möglichkeiten gefunden, das zu tun. Wenn ich in Visual Studio 2008 das Dialogfeld "Neues Element hinzufügen" öffne, können Sie eine Einstellungsdatei (.settings) oder eine Konfigurationsdatei (.config) erstellen. Was ist der Unterschied zwischen beiden und in welchem ​​Szenario sollten sie verwendet werden?

Hemant
quelle

Antworten:

55

UPDATE: In ASP.NET Core - Land, Konfiguration wird nicht verwaltet mehr über einer dieser - sieht diese fantastische writeup von Travis Illig mit dem az auf Microsoft.Extension.Configurationund Microsoft.Extensions.Configuration.Binderwelche effektiv ein Ober aller diesem


Einstellungen (sowohl aus einem .settings-Set als auch aus Configuration.AppSettings) werden in der .config-Datei gespeichert [neben vielen anderen Dingen].

Der Unterschied besteht darin, dass das .settings-Material [das in .NET 2.0 / VS2005 hinzugefügt wurde] eine stark typisierte Klasse über eine Reihe von Einstellungen legt, die zusammengehören, während Sie Configuration.AppSettingsnur Zeichenfolgen abrufen können, um Konvertierungen zu erzwingen, und dies nicht tun habe den Begriff der Standardeinstellungen. (Die Konfigurationsklasse wurde tatsächlich in eine Seitenbaugruppe verschoben, um dies widerzuspiegeln. Sie müssen explizit einen Verweis auf System.Configuration hinzufügen, wenn Sie dies wünschen.)

Wenn Sie Ihrem Projekt eine .settings hinzufügen, wird eine app.config hinzugefügt, in der die Einstellungen gespeichert werden, falls Sie noch keine haben. Die Klasse, die die Einstellungen liest, wird jedes Mal automatisch generiert, wenn Sie die Liste der Einstellungen für Ihre Komponente / Anwendung ändern.

Weitere Funktionen von .Settings sind die Möglichkeit, einige Einstellungen als benutzerspezifisch festzulegen (und die benutzerspezifischen Einstellungen mit einem einzigen Aufruf zu speichern).

Der beste Grund für die Verwendung von .Settings ist im Allgemeinen, dass Sie anhand der Verwendung von Eigenschaften eindeutig erkennen können, wer welche Einstellung in einer Codebasis verwendet (und jeder Satz ist ein separater Block in der XML-Datei). Configuration.appSettingsist von Natur aus globaler - es ist nur eine Tüte mit Eigenschaften und Sie wissen nicht, welche DLL, welches Subsystem oder welche Klasse von einem bestimmten Einstellungseintrag abhängt. Weitere Informationen finden Sie in diesem Blogbeitrag von Steven Smith .

Wenn Sie immer noch nicht genug über das Einstellungsmanagement gelesen haben, werden Sie diesen Beitrag von Rick Strahl zu diesem Thema nicht der Vollständigkeit halber oder in einer Vielzahl von Ideen und Blickwinkeln schlagen .

ASIDE: Es gibt auch das in diesem Artikel beschriebene ASP.NET vNext-Konfigurationsmaterial , das sehr flexibel ist und einen anderen Blickwinkel auf die Verwaltung von Konfigurationseinstellungen bietet.

Ruben Bartelink
quelle
Danke für die Antwort. Nur verwirrt über einen Punkt: Es gibt 2 Arten von Einstellungen. Eine ist die App-Einstellung und die andere ist die Benutzereinstellung. Wenn beide Arten von Einstellungen in der Konfigurationsdatei gespeichert sind, wie unterscheiden sich die Benutzereinstellungen für verschiedene Benutzer?
Hemant
3
Tut mir leid, dass ich das nicht erwähnt habe. Benutzereinstellungen sind einer der Gründe, warum Standardeinstellungen vorhanden sind (wenn der Benutzer die App noch nicht verwendet hat, gelten die Standardeinstellungen, bis eine Änderung gespeichert wird). Die Benutzereinstellungen werden in einer separaten Konfigurationsdatei im Verzeichnis des Benutzerprofils (Benutzer \ XXX) gespeichert. Benutzereinstellungen können ebenfalls aktualisiert werden (Systemeinstellungen können nicht die Standard-API verwenden und sollten dies nicht tun - sie befinden sich in Programmdateien und es ist nicht möglich, den Zugriff mehrerer Benutzer auf diese sicher zu steuern.)
Ruben Bartelink
Wo passt der Konfigurationsmanager in all das? Ich versuche und schaffe es nicht, mir zu sagen, wo meine settings.settings leben und speichere dann eine leere Konfiguration dort
JonnyRaa
@JonnyLeeds Ich bin mir nicht sicher, was du meinst, also werde ich versuchen zu erweitern, um zu sehen, ob es dir hilft ... Deine .settingsDatei definiert nur das Schema und wird in einen Codebehind kompiliert. Die tatsächlichen Werte befinden sich in der .configDatei, die sich in einem Benutzerprofilverzeichnis befindet (Nichtbenutzer sind nicht beschreibbar). Die Daten befinden sich an derselben Stelle, an ConfigurationManager.AppSettingsder sie sich befinden. Sie haben lediglich ein benutzerdefiniertes Format mit einer stärkeren Eingabe. Sie können Dinge wie tun, ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal ).FilePathaber bevor ich Ihnen das sage ... warum?
Ruben Bartelink
@ RubenBartelink danke für die Antwort. Das ist so ziemlich die Schlussfolgerung, zu der ich gekommen bin - habe gerade ein Q & A gepostet, um meine Schmerzen hier zu dokumentieren !
JonnyRaa
5

Eine Einstellungsdatei ist eine Ressourcendatei, in der Sie die verschiedenen Einstellungen und ihren Standardwert angeben.

Die Werte selbst werden in der Anwendungskonfigurationsdatei (.config-Datei) konfiguriert.

Eine Einstellungsdatei wird niemals bereitgestellt, daher benötigen Sie die Konfigurationsdatei, um die Konfiguration durchzuführen.

Gerrie Schenck
quelle
Während ich mich im wählerischen Modus befinde (habe gerade meinen eigenen Beitrag aktualisiert - viele fehlen dort) Während eine .settings-Datei eine XML-Datei ist, bin ich mir ziemlich sicher, dass sie nicht als Ressource verwendet wird, oder? Außerdem werden benutzerspezifische Werte in einem separaten Bereich außerhalb der .config-Datei gespeichert. Die .config-Datei muss bereitgestellt werden, wenn Sie nicht standardmäßige Einstellungen haben (Attribute innerhalb der generierten Einstellungsklasse verwalten die Standardeinstellung der Werte, wenn in der Konfigurationsdatei nichts angegeben ist.)
Ruben Bartelink
Während die XML-Datei Settings.settings nicht bereitgestellt wird, wird die Datei Settings.Designer.cs in die Anwendung kompiliert, nicht wahr?
Kyle Delaney
0

Die Datei app.config wird im selben Verzeichnis wie die App gespeichert. Normale Benutzer haben keine Schreibberechtigung (z. B. in "Programme").

Die Einstellungsdatei sollte im Verzeichnis "AppData" des Benutzers gespeichert sein (wo er über R / W-Berechtigungen verfügt).

Verwenden Sie daher die Einstellungsdatei für vom Benutzer konfigurierbare Optionen.

Laktak
quelle
Laut anderen Antworten nicht ganz richtig: stackoverflow.com/a/909712/199364 , stackoverflow.com/a/13072966/199364 .settings (und die SettingsUnterstützung von Visual Studio ) können sowohl für die einmalige Anwendungskonfiguration als auch für die Konfiguration pro Benutzer verwendet werden. .settingsexistiert zur Laufzeit nicht; Was zur Laufzeit vorhanden ist, befindet sich app.configim App-Ordner und [Benutzer] .configim Datenordner des Benutzers.
ToolmakerSteve