.NET Framework
Ustawienia
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.
Ustawienia mogą być mocno wpisane. Dowolny typ, który można serializować, może być użyty jako wartość ustawienia.
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 plikuuser.config
w folderze danych aplikacji użytkownika (który różni się w zależności od wersji systemu operacyjnego).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:
Jeśli plik konfiguracyjny (
app.config
lubweb.config
) nie istnieje dla projektu, zostanie utworzony.Karta Ustawienia zostanie zastąpiona kontrolką siatki, która umożliwia tworzenie, edytowanie i usuwanie poszczególnych ustawień.
W Eksploratorze rozwiązań element
Settings.settings
jest dodawany do specjalnego folderu Właściwości. Otwarcie tego elementu otworzy kartę Ustawienia.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 nazwieDefault
.
Podczas dodawania każdego nowego wpisu na karcie Ustawienia program Visual Studio wykonuje następujące dwie czynności:
Zapisuje ustawienie w pliku konfiguracyjnym, w sekcji konfiguracji niestandardowej zaprojektowanej do zarządzania przez klasę Settings.
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:
Dodaj ustawienie aplikacji o nazwie ExampleTimeout, używając czasu System.Timespan, i ustaw wartość na 1 minutę:
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.