Die .NET-Konfigurationseinstellungen sind nicht so flexibel, wie ich es möchte. Wenn ich Application Settings richtig verstehe, bin ich eingeschränkt, wenn ich Einstellungen ändern/bearbeiten kann. In C# sind die Anwendungseinstellungen in zwei verschiedene Typen oder Bereiche ("Anwendung" und "Benutzer") unterteilt, beide haben jedoch Einschränkungen in Bezug darauf, wie sie geändert oder geändert werden können. Die folgende Tabelle zeigt die differnce:Bearbeiten/Ändern von C# -Anwendungseinstellungen
SCOPE: | EDIT AT DESIGN-TIME: | EDIT AT RUN-TIME: | EDIT BETWEEN SESSIONS: --------------------------------------------------------------------------------------- User | Setings.settings | Settings.Default.Save() | *Not supported* Application | Setings.settings | *Not supported* | edit app.exe.config
Gibt es eine „eingebaute“ Einstellungen Funktionen, die mir erlauben, Einstellungen von allen drei Mechanismen zu bearbeiten? Eine der Hauptmotivationen für die Verwendung einer Konfigurationsdatei besteht darin, Benutzern das Ändern von Standardwerten zu ermöglichen, ohne den Quellcode neu erstellen zu müssen (wie dies mit den Einstellungen Application-scoped möglich ist). Der Benutzer sollte jedoch nicht erzwungen zum Bearbeiten einer .config-Datei sein; Sie sollten auch in der Lage sein, zur Laufzeit eine Änderung vorzunehmen, die sich über die Einstellungen hinweg fortsetzt (wie dies mit den Einstellungen Benutzerdefiniert möglich ist). Sicherlich muss es einen Mechanismus geben, der beide Funktionalitäten bietet.
BOTTOM LINE: Warum können die Anwendungseinstellungen (app.exe.config
) nicht zur Laufzeit bearbeitet werden? Das würde alle meine Probleme lösen. Ich verstehe, dass dies Probleme für Benutzer verursachen könnte, die denselben Computer verwenden. Aber wer macht das mehr?
POTENTIAL Abhilfe: Gibt es trotzdem den Standard-Speicherort für die Benutzereinstellungen Konfigurationsdatei in einen nicht versteckt Ordner zu ändern?
UPDATE (zur Klarstellung): Was ich sagen will ist, dass ich eine Standard-Einstellung zu ändern bei Entwurfszeit, bei Laufzeit, in der Lage sein wollen oderZwischensitzungen (zB durch Bearbeiten einer Konfigurationsdatei). Aber wenn ich die eingebauten C# Persistenzmechanismen verwende, die von Settings.settings
zur Verfügung gestellt werden, muss ich höchstens 2 von 3 auswählen. Fehle ich etwas? Gibt es eine andere Alternative, die mir nicht bekannt ist?
[Use Case: Ich möchte für die Verbindungszeichenfolge ein „default“ Datenbanknamen speichern, aber ich möchte, dass die Benutzer in der Lage sein, eine andere Datenbank zur Laufzeit angeben (und damit werden die „neue“ Standard für diesen Benutzer). Aber ich möchte auch in der Lage sein, die standardmäßig in der Datei config überschreiben, ohne wieder laufen oder Wiederaufbau der Anwendung]
[BETTER Use Case:. (In Reaktion auf die Kommentare)
Ich habe ein Computermodell mit einer Konfigurationsdatei, die die Standardwerte für Parameter im Modell enthält. Benutzer A startet das Modell und entscheidet, den Wert einiger Parameter zu ändern. Diese Änderung muss persist für alle zukünftigen Sitzungen für diesen Benutzer (d. H. Bearbeiten bei RTunTime). Anschließend möchte dieser Benutzer diese geänderte Konfigurationsdatei mit seinem Team teilen (z. B. über das Versionskontroll-Repository oder per E-Mail). Dies würde es Benutzer B ermöglichen, ihre Standardparameterwerte zu aktualisieren (um Benutzer A zu entsprechen), ohne sie manuell in der Anwendung ändern zu müssen (d. H. Zwischen Sitzungen bearbeiten). Alle diese Mods sollten NACH Design-Zeit passieren.]
* Ich weiß, dass ich kann „technisch“ bearbeiten benutzer scoped Einstellungen in der app.exe.config Datei in dem versteckten AppData-Ordner befindet, aber das ist eine versteckte Datei und nicht alle Benutzer über ausreichende Berechtigungen haben um es zu sehen. (ABER siehe oben "Mögliche Abhilfe".)
Als mein Mangel an Wissen, habe ich solche Situationen nicht überwunden.Aber mit app.config können Sie Ihre Einstellung in den Namen Wert Paare definieren und kann den Namen zur Laufzeit entsprechend wählen. –
Eines der ersten Dinge, die ich kurz nach dem Wissen über 'C#' gelernt habe, war die Serialisierung. Während Wörterbücher schön sind, sind sie nicht gut, um komplexe Daten zu enthalten, müssen jedes Mal umwandeln, wenn Sie auf Daten zugreifen, Fehler enthalten (vor allem durch Benutzerbearbeitungen) ... Serialisierung/Deserialisierung ist so einfach mit 'XmlSerializer' also warum stören mit 'Einstellungen' überhaupt? Ich fand JSON, das beste Format zu sein, um Einstellungen zu halten. – Sinatr
Ohne die Erhöhung des Administrators sollte ein Benutzer nicht in der Lage sein, Einstellungen zu aktualisieren, die für alle Benutzer gelten, da ein Benutzer möglicherweise unerwünschte Änderungen vornimmt, die sich auf andere Benutzer auswirken.Es macht also durchaus Sinn, dass es schwieriger ist, die Anwendungseinstellungen zu ändern ... – Phil1970