Suche…


AppSettings aus ConfigurationSettings in .NET 1.x

Veraltete Nutzung

Die ConfigurationSettings- Klasse war der ursprüngliche Weg, um Einstellungen für eine Assembly in .NET 1.0 und 1.1 abzurufen. Sie wurde durch die ConfigurationManager- Klasse und die WebConfigurationManager- Klasse ersetzt.

Wenn Sie im Abschnitt appSettings der Konfigurationsdatei zwei Schlüssel mit demselben Namen haben, wird der letzte verwendet.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationSettings.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            string twoKeys = ConfigurationSettings.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

AppSettings aus ConfigurationManager in .NET 2.0 und höher lesen

Die ConfigurationManager- Klasse unterstützt die AppSettings Eigenschaft, mit der Sie das Lesen der Einstellungen aus dem appSettings Abschnitt einer Konfigurationsdatei auf dieselbe Weise wie bei .NET 1.x fortsetzen können.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationManager.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            var twoKeys = ConfigurationManager.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Einführung in die Unterstützung stark typisierter Anwendungen und Benutzereinstellungen von Visual Studio

Visual Studio hilft bei der Verwaltung von Benutzer- und Anwendungseinstellungen. Die Verwendung dieses Ansatzes hat diese Vorteile gegenüber der Verwendung des appSettings Abschnitts der Konfigurationsdatei.

  1. Einstellungen können stark getippt werden. Für einen Einstellungswert kann jeder Typ verwendet werden, der serialisiert werden kann.

  2. Anwendungseinstellungen können leicht von den Benutzereinstellungen getrennt werden. Anwendungseinstellungen werden in einer einzigen Konfigurationsdatei gespeichert: web.config für Websites und Webanwendungen und app.config, umbenannt in Assembly .exe.config, wobei Assembly der Name der ausführbaren Datei ist. Benutzereinstellungen (die nicht von user.config verwendet werden) werden in einer Datei user.config im Anwendungsdatenordner des Benutzers gespeichert (je nach Betriebssystemversion).

  3. Anwendungseinstellungen aus Klassenbibliotheken können ohne Risiko von Namenskollisionen in einer einzigen Konfigurationsdatei zusammengefasst werden, da jede Klassenbibliothek über einen eigenen Abschnitt für benutzerdefinierte Einstellungen verfügen kann.

In den meisten Projekttypen verfügt der Projekteigenschaften-Designer über eine Registerkarte Einstellungen , auf der sich benutzerdefinierte Anwendungs- und Benutzereinstellungen erstellen lassen. Anfänglich ist die Registerkarte "Einstellungen" leer, mit einem einzigen Link zum Erstellen einer Standardeinstellungsdatei. Wenn Sie auf den Link klicken, werden folgende Änderungen vorgenommen:

  1. Wenn für das Projekt keine Konfigurationsdatei ( app.config oder web.config ) vorhanden ist, wird eine erstellt.

  2. Die Registerkarte Einstellungen wird durch ein Raster-Steuerelement ersetzt, mit dem Sie einzelne Einstellungen erstellen, bearbeiten und löschen können.

  3. Im Projektmappen-Explorer wird unter dem Sonderordner Eigenschaften ein Element Settings.settings hinzugefügt. Durch Öffnen dieses Elements wird die Registerkarte Einstellungen geöffnet.

  4. Eine neue Datei mit einer neuen Teilklasse wird unter dem Ordner Properties im Projektordner hinzugefügt. Diese neue Datei heißt Settings.Designer.__ (.cs, .vb usw.) und die Klasse heißt Settings . Die Klasse wird durch einen Code generiert. Sie sollte also nicht bearbeitet werden. Die Klasse ist jedoch eine Teilklasse. Sie können die Klasse erweitern, indem Sie zusätzliche Elemente in eine separate Datei einfügen. Darüber hinaus wird die Klasse mithilfe des Singleton-Musters implementiert, wodurch die Singleton-Instanz mit der Eigenschaft Default .

Wenn Sie jeden neuen Eintrag zur Registerkarte "Einstellungen" hinzufügen, führt Visual Studio die folgenden zwei Aktionen aus:

  1. Speichert die Einstellung in der Konfigurationsdatei in einem benutzerdefinierten Konfigurationsabschnitt, der von der Settings-Klasse verwaltet werden soll.

  2. Erstellt ein neues Mitglied in der Settings-Klasse, um die Einstellung in dem bestimmten Typ zu lesen, zu schreiben und darzustellen, der auf der Registerkarte Settings ausgewählt ist.

Lesen stark typisierter Einstellungen aus dem benutzerdefinierten Abschnitt der Konfigurationsdatei

Beginnen Sie mit einem neuen Einstellungsbereich und einer benutzerdefinierten Konfiguration:

Registerkarte "Einstellungen" des Projekteigenschaften-Designers

Fügen Sie mit der Zeit System.Timespan eine Anwendungseinstellung mit dem Namen ExampleTimeout hinzu, und legen Sie den Wert auf 1 Minute fest:

Registerkarte "Einstellungen" beim Hinzufügen der Anwendungseinstellung "ExampleTimeout"

Speichern Sie die Projekteigenschaften, wodurch die Einträge auf der Registerkarte Einstellungen gespeichert werden, die benutzerdefinierte Einstellungsklasse neu generiert und die Projektkonfigurationsdatei aktualisiert wird.

Verwenden Sie die Einstellung aus Code (C #):

Program.cs

using System;
using System.Diagnostics;
using ConsoleApplication1.Properties;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            TimeSpan exampleTimeout = Settings.Default.ExampleTimeout;
            Debug.Assert(TimeSpan.FromMinutes(1).Equals(exampleTimeout));

            Console.ReadKey();
        }
    }
}

Unter der Decke

Schauen Sie in der Projektkonfigurationsdatei nach, wie der Eintrag für die Anwendungseinstellungen erstellt wurde:

app.config (Visual Studio aktualisiert dies automatisch)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings />
  <applicationSettings>
    <ConsoleApplication1.Properties.Settings>
      <setting name="ExampleTimeout" serializeAs="String">
        <value>00:01:00</value>
      </setting>
    </ConsoleApplication1.Properties.Settings>
  </applicationSettings>
</configuration>

Beachten Sie, dass der Abschnitt appSettings nicht verwendet wird. Der Abschnitt applicationSettings enthält einen benutzerdefinierten, für einen Namespace qualifizierten Abschnitt, der für jeden Eintrag ein setting enthält. Der Typ des Werts wird nicht in der Konfigurationsdatei gespeichert. Es ist nur der Settings Klasse bekannt.

In der Settings Klasse Settings , wie diese ConfigurationManager Klasse zum Lesen dieses benutzerdefinierten Abschnitts verwendet wird.

Settings.designer.cs (für C # -Projekte)

...
    [global::System.Configuration.ApplicationScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
    public global::System.TimeSpan ExampleTimeout {
        get {
            return ((global::System.TimeSpan)(this["ExampleTimeout"]));
        }
    }
...

Beachten Sie, dass ein DefaultSettingValueAttribute erstellt wurde, um den auf der Registerkarte Einstellungen des Projekteigenschaften-Designers eingegebenen Wert zu speichern. Wenn der Eintrag in der Konfigurationsdatei fehlt, wird stattdessen dieser Standardwert verwendet.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow