Frage

  • Sie können App.config verwenden; aber es unterstützt nur Schlüssel / Wert-Paare.
  • Sie können mit .Net Konfiguration, Konfigurationsabschnitte; aber es kann wirklich komplex sein.
  • Sie können XML-Serialisierung / Deserialisierung selbst verwenden; Ihre Klassen-Weg.
  • Sie können eine andere Methode verwenden; was können sie sein? ...

Welche von diesen oder anderen Methoden (wenn es) bevorzugen Sie? Warum?

War es hilfreich?

Lösung

Wenn der Schlüssel-Wert-Paare sind nicht genug verwende ich Konfigurationsabschnitte, da sie nicht komplex sind, zu verwenden (es sei denn, Sie benötigen einen komplexen Abschnitt):

Definieren Sie Ihren benutzerdefinierten Abschnitt:

        public class CustomSection : ConfigurationSection
        {
            [ConfigurationProperty("LastName", IsRequired = true,
            DefaultValue = "TEST")]
            public String LastName
            {
                get { return (String)base["LastName"]; }
                set { base["LastName"] = value; }
            }

            [ConfigurationProperty("FirstName", IsRequired = true, DefaultValue =
            "TEST")]
            public String FirstName
            {
                get { return (String)base["FirstName"]; }
                set { base["FirstName"] = value; }
            }

            public CustomSection()
            {

            }
        }

erstellen Programmatically Ihren Abschnitt (falls es nicht bereits vorhanden ist):

           // Create a custom section.
            static void CreateSection()
            {
                try
                {

                    CustomSection customSection;

                    // Get the current configuration file.
                    System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(@"ConfigurationTest.exe");

                    // Create the section entry  
                    // in the <configSections> and the 
                    // related target section in <configuration>.
                    if (config.Sections["CustomSection"] == null)
                    {
                        customSection = new CustomSection();
                        config.Sections.Add("CustomSection", customSection);
                        customSection.SectionInformation.ForceSave = true;
                        config.Save(ConfigurationSaveMode.Full);
                    }
                }
                catch (ConfigurationErrorsException err)
                {
                    //manage exception - give feedback or whatever
                }

            }

Nach CustomSection Definition und tatsächliche CustomSection wird für Sie erstellt werden:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="CustomSection" type="ConfigurationTest.CustomSection, ConfigurationTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" />
  </configSections>
  <CustomSection LastName="TEST" FirstName="TEST" />
</configuration>

Jetzt ist Ihre Abschnitt Eigenschaften abrufen:

    CustomSection section = (CustomSection)ConfigurationManager.GetSection("CustomSection");
    string lastName = section.LastName;
    string firstName = section.FirstName;

Andere Tipps

Wenn ich damit durchkommen kann, werde ich nur die App.Config verwenden, aber wenn ich etwas komplexer benötigen ich benutzerdefinierte Konfigurationsabschnitte verwenden. Ja, es ist ein Schmerz, ein Verständnis der am Anfang zu bekommen, aber eine einheitliche Konfiguration Quelle und vertraute Konfiguration für alle Einstellungen wird die Zeit Investition meiner Meinung nach wert.

Legen Sie Ihre Konfiguration in eine Datenbank. Wenn Sie Ihre App auf mehr als 1 Maschine (zB ein Client-Server-Anwendung) laufen dann alle pro-Maschine-Config-Systeme sind ein PITA. Ein einzelner Konfigurationsbereich ist der beste Weg, um Ihre Konfiguration zu platzieren. Schreiben Sie eine gui es zu verwalten, und Sie werden sehr glücklich sein.

Ausrollen app.config Dateien zu 200 Client-Boxen .. seine nicht Spaß, vor allem, wenn man bekommt verpasst (und sie, glauben Sie mir).

war ich ein Netzwerk / Systemadministrator in der Vergangenheit und jetzt entwickle ich internen Dienstprogramme für die Datenbankanwendungen. Was ich gefunden habe, ist dies:

Einfache Nicht verschachtelte Konfigurationsdateien sind die besten für Anwendungen, die Veränderung nicht, wo sie sehr viel ihre Ressourcen zugreifen zu können.

Alles, was komplexere muss in eine Datenbank mit einer Verwaltungs UI gehen. Dies gilt nur für normalen Business-Anwender. Wenn Sie sich Sorgen über die Datenbank sind beschädigt zu werden, dann verwenden Sie die komplexe Konfigurationsdatei Ansatz. Dateien sind in der Regel weniger als korrupt Datenbanken.

Nun, wenn Ihre Benutzer andere Entwickler sind, dann werden Sie viel mehr Flexibilität auf, was Ihre Konfigurationen zu verwenden, zu speichern.

Ich finde NameValueCollectionHandler die einfachste und am besten, und ich würde verknüpfen off im allgemeinen zu einer externen Konfigurationsdatei über das configSource Attribut.

Ich versuche, die absolute Minimum Konfiguration in Konfigurationsdateien zu setzen, wobei die meisten davon in Code mit einer Anwendung konfiguriert sind, die selbstbewusst seine Einsatzumgebung ist (wie zB durch Computernamen oder IP-Adresse, falls bekannt). Natürlich ist dies erforderlich viel Vorplanung und Kenntnis Ihrer Umgebungen, aber viel weniger Kopfschmerzen bei der Bereitstellung.

Ich verwende eine benutzerdefinierte XML-Konfigurationsdatei, in der eine andere Konfigurationsdatei für jede Umgebung (dev / qa / prod) verwendet wird. Die Konfigurationsdateien Vorlagen, die mit Dingen wie Host / Port-Konfigurationen für Dienste dynamisch instanziiert werden -. Dies macht Multi-Umgebungen und Failover sehr einfach, wie es von der Vorlage Instanziierung Code gehandhabt werden kann

Natürlich, wenn Sie sehr wenig Config haben und nicht sich mit mehreren Umgebungen dann app.config mehr Standard und ist wahrscheinlich der beste Weg zu gehen.

I Sache Schlüssel / Wert-Konfigurationen arbeiten sehr gut für einfache Konfigurationsdateien. Es wird ein Problem, wenn die Datei zu halten, zu wachsen und schwierig beginnt. Wir begannen Konfigurationsdatei „common“ und „spezifische“ Anwendungen Konfigurationen aufzuspalten. Der Dateizugriff ist transparent zu App „gemeinsame“ Werte gleich in den meisten Fällen, aber „spezifische“ unterscheiden sich für jede implementierte Anwendung.

Ich verwende eine benutzerdefinierte XML-Konfigurationsdatei. Jede Einstellung hat einen Schlüssel, Wert und Typen.

Es hat einen Hauptteil, der alle Einstellungen und zusätzliche Abschnitte enthält enthält, überschreibt für bestimmte Umgebungen Einstellung (dev, Inszenierung, leben). Das brauche ich nicht Abschnitte der Datei zu ersetzen, bei der Bereitstellung. Ich habe ein kleines Wrapper, die Sie anrufen können, eine bestimmte Einstellung oder ein Wörterbuch, um alle von ihnen enthalten.

Ich habe vor kurzem eine T4-Vorlage das wird lesen Sie die Konfigurationsdatei und erstellen Klasse eine statische stark typisierte Einstellungen. Das ist schon eine große Zeitersparnis.

Ich halte die meisten meiner config in IoC-Container, z.B. Spring.Net.

Wenn Sie .NET 3.0 verfügbar ist, finde ich die XamlReader / XamlWriter sehr praktisch für Einstellungen zu speichern. Sie können schreiben / lesen jedes .NET-Objekt zu XAML, wenn:

  • Das Objekt verfügt über einen parameterlosen Konstruktor
  • Die Eigenschaften zum Lesen / Schreiben haben öffentliche Getter und Setter

Es ist besonders schön, dass Sie müssen nicht Ihre Einstellungen dekorieren Objekte mit allen Attributen.

DataSet.WriteXML () / DataSet.ReadXML () funktioniert für mich ziemlich gut, wenn die app.config es nicht mehr schneiden.

Meistens ziehe ich mit benutzerdefinierter XML-Datei und XML-Serialisierung Methode, um diese Konfigurationsdateien lesen und schreiben ... Nicht auf Schlüssel / Wert-Paare beschränkt und nicht komplex zu implementieren ...

Ich habe meine eigene Sonderklasse viel Glück rollen hatte, die Konfigurationsdaten von einem „.settings“ Datei mit der anrufenden Anordnung zugeordnet zurückgibt. Die Datei ist XML, und die Einstellungen Klasse macht es öffentlich als XDocument. Darüber hinaus gibt die Indexer für diese Einstellungen Klasse Elementwerte von / Einstellungen / Knoten setzen.

Funktioniert gut für einfache Anwendungen, bei denen Sie nur einen Schlüssel / Wert-Paar Zugriff auf Einstellungen benötigen, und funktioniert gut für komplizierte Situationen, in denen Sie benötigen, um Ihre eigene Struktur zu definieren und verwenden System.Xml.Linq das XML-Dokument abfragen.

Ein weiterer Vorteil Ihrer eigenen Walz ist, dass Sie Filesystemwatcher und Callback-Aktion Typen automatisch Feuer eine Methode, wenn die Dateiänderungen zur Laufzeit verwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top