Szukaj…


AppSettings z ConfigurationSettings w .NET 1.x

Przestarzałe użycie

Klasa ConfigurationSettings była oryginalnym sposobem na pobranie ustawień zestawu w .NET 1.0 i 1.1. Został zastąpiony przez klasę ConfigurationManager i klasę WebConfigurationManager .

Jeśli masz dwa klucze o tej samej nazwie w sekcji appSettings pliku konfiguracyjnego, użyty zostanie ostatni.

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();
        }
    }
}

Odczytywanie ustawień aplikacji z ConfigurationManager w .NET 2.0 i nowszych

Klasa ConfigurationManager obsługuje właściwość AppSettings , która pozwala kontynuować czytanie ustawień z sekcji appSettings pliku konfiguracyjnego w taki sam sposób, jak obsługiwane .NET 1.x.

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();
        }
    }
}

Wprowadzenie do silnie typowanej aplikacji i obsługi ustawień użytkownika z Visual Studio

Visual Studio pomaga zarządzać ustawieniami użytkowników i aplikacji. Korzystanie z tego podejścia ma te zalety w porównaniu z sekcją appSettings pliku konfiguracyjnego.

  1. Ustawienia mogą być mocno wpisane. Dowolny typ, który można serializować, może być użyty jako wartość ustawienia.

  2. Ustawienia aplikacji można łatwo oddzielić od ustawień użytkownika. Ustawienia aplikacji są przechowywane w jednym pliku konfiguracyjnym: web.config dla witryn sieci Web i aplikacji internetowych oraz app.config, przemianowany na assembly .exe.config, gdzie assembly to nazwa pliku wykonywalnego. Ustawienia użytkownika (nieużywane przez projekty internetowe) są przechowywane w pliku user.config w folderze danych aplikacji użytkownika (który różni się w zależności od wersji systemu operacyjnego).

  3. Ustawienia aplikacji z bibliotek klas można łączyć w jeden plik konfiguracyjny bez ryzyka kolizji nazw, ponieważ każda biblioteka klas może mieć własną sekcję ustawień niestandardowych.

W większości typów projektów Projektant właściwości projektu ma zakładkę Ustawienia , która jest punktem wyjścia do tworzenia niestandardowych ustawień aplikacji i użytkownika. Początkowo karta Ustawienia będzie pusta, z jednym linkiem do utworzenia domyślnego pliku ustawień. Kliknięcie linku powoduje następujące zmiany:

  1. Jeśli plik konfiguracyjny ( app.config lub web.config ) nie istnieje dla projektu, zostanie utworzony.

  2. Karta Ustawienia zostanie zastąpiona kontrolką siatki, która umożliwia tworzenie, edytowanie i usuwanie poszczególnych ustawień.

  3. W Eksploratorze rozwiązań element Settings.settings jest dodawany do specjalnego folderu Właściwości. Otwarcie tego elementu otworzy kartę Ustawienia.

  4. Nowy plik z nową klasą częściową jest dodawany w folderze Properties folderze projektu. Ten nowy plik nosi nazwę Settings.Designer.__ (.cs, .vb itp.), A klasa nosi nazwę Settings . Klasa jest generowana kodem, więc nie powinna być edytowana, ale klasa jest klasą częściową, więc możesz ją rozszerzyć, umieszczając dodatkowych członków w osobnym pliku. Ponadto klasa jest implementowana przy użyciu wzorca singleton, odsłaniając instancję singleton z właściwością o nazwie Default .

Podczas dodawania każdego nowego wpisu na karcie Ustawienia program Visual Studio wykonuje następujące dwie czynności:

  1. Zapisuje ustawienie w pliku konfiguracyjnym, w sekcji konfiguracji niestandardowej zaprojektowanej do zarządzania przez klasę Settings.

  2. Tworzy nowego członka w klasie Ustawienia, aby czytać, pisać i prezentować ustawienia w określonym typie wybranym z karty Ustawienia.

Odczytywanie silnie wpisanych ustawień z niestandardowej sekcji pliku konfiguracyjnego

Począwszy od nowej klasy ustawień i sekcji konfiguracji niestandardowej:

Karta Ustawienia projektanta właściwości projektu

Dodaj ustawienie aplikacji o nazwie ExampleTimeout, używając czasu System.Timespan, i ustaw wartość na 1 minutę:

Karta Ustawienia podczas dodawania ustawienia aplikacji ExampleTimeout

Zapisz właściwości projektu, która zapisuje wpisy na karcie Ustawienia, a także ponownie generuje niestandardową klasę Ustawienia i aktualizuje plik konfiguracji projektu.

Użyj ustawienia z kodu (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();
        }
    }
}

Pod przykryciem

Przejrzyj plik konfiguracji projektu, aby zobaczyć, jak utworzono pozycję ustawienia aplikacji:

app.config (Visual Studio aktualizuje to automatycznie)

<?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>

Zauważ, że sekcja appSettings nie jest używana. Sekcja applicationSettings zawiera niestandardową sekcję z kwalifikowaną przestrzenią nazw, która zawiera element setting dla każdej pozycji. Typ wartości nie jest przechowywany w pliku konfiguracyjnym; jest znany tylko klasie Settings .

Zajrzyj do klasy Settings aby zobaczyć, w jaki sposób używa klasy ConfigurationManager do odczytu tej sekcji niestandardowej.

Settings.designer.cs (dla projektów w C #)

...
    [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"]));
        }
    }
...

Zauważ, że DefaultSettingValueAttribute został utworzony w celu przechowywania wartości wprowadzonej na karcie Ustawienia projektanta właściwości projektu. Jeśli w pliku konfiguracyjnym brakuje wpisu, używana jest ta wartość domyślna.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow