ConfigurationManager Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia dostęp do plików konfiguracji dla aplikacji klienckich. Tej klasy nie można dziedziczyć.
public ref class ConfigurationManager abstract sealed
public static class ConfigurationManager
type ConfigurationManager = class
Public Class ConfigurationManager
- Dziedziczenie
-
ConfigurationManager
Przykłady
W pierwszym przykładzie pokazano prostą aplikację konsolową, która odczytuje ustawienia aplikacji, dodaje nowe ustawienie i aktualizuje istniejące ustawienie.
using System;
using System.Configuration;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ReadAllSettings();
ReadSetting("Setting1");
ReadSetting("NotValid");
AddUpdateAppSettings("NewSetting", "May 7, 2014");
AddUpdateAppSettings("Setting1", "May 8, 2014");
ReadAllSettings();
}
static void ReadAllSettings()
{
try
{
var appSettings = ConfigurationManager.AppSettings;
if (appSettings.Count == 0)
{
Console.WriteLine("AppSettings is empty.");
}
else
{
foreach (var key in appSettings.AllKeys)
{
Console.WriteLine("Key: {0} Value: {1}", key, appSettings[key]);
}
}
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error reading app settings");
}
}
static void ReadSetting(string key)
{
try
{
var appSettings = ConfigurationManager.AppSettings;
string result = appSettings[key] ?? "Not Found";
Console.WriteLine(result);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error reading app settings");
}
}
static void AddUpdateAppSettings(string key, string value)
{
try
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error writing app settings");
}
}
}
}
Imports System.Configuration
Module Module1
Sub Main()
ReadAllSettings()
ReadSetting("Setting1")
ReadSetting("NotValid")
AddUpdateAppSettings("NewSetting", "May 7, 2014")
AddUpdateAppSettings("Setting1", "May 8, 2014")
ReadAllSettings()
End Sub
Sub ReadAllSettings()
Try
Dim appSettings = ConfigurationManager.AppSettings
If appSettings.Count = 0 Then
Console.WriteLine("AppSettings is empty.")
Else
For Each key As String In appSettings.AllKeys
Console.WriteLine("Key: {0} Value: {1}", key, appSettings(key))
Next
End If
Catch e As ConfigurationErrorsException
Console.WriteLine("Error reading app settings")
End Try
End Sub
Sub ReadSetting(key As String)
Try
Dim appSettings = ConfigurationManager.AppSettings
Dim result As String = appSettings(key)
If IsNothing(result) Then
result = "Not found"
End If
Console.WriteLine(result)
Catch e As ConfigurationErrorsException
Console.WriteLine("Error reading app settings")
End Try
End Sub
Sub AddUpdateAppSettings(key As String, value As String)
Try
Dim configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim settings = configFile.AppSettings.Settings
If IsNothing(settings(key)) Then
settings.Add(key, value)
Else
settings(key).Value = value
End If
configFile.Save(ConfigurationSaveMode.Modified)
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name)
Catch e As ConfigurationErrorsException
Console.WriteLine("Error writing app settings")
End Try
End Sub
End Module
W poniższym przykładzie pokazano, jak odczytywać dane z bazy danych przy użyciu parametrów połączenia.
using System;
using System.Configuration;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ReadProducts();
}
static void ReadProducts()
{
var connectionString = ConfigurationManager.ConnectionStrings["WingtipToys"].ConnectionString;
string queryString = "SELECT Id, ProductName FROM dbo.Products;";
using (var connection = new SqlConnection(connectionString))
{
var command = new SqlCommand(queryString, connection);
connection.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
}
}
}
}
}
Imports System.Configuration
Imports System.Data.SqlClient
Module Module1
Sub Main()
ReadProducts()
End Sub
Sub ReadProducts()
Dim connectionString = ConfigurationManager.ConnectionStrings("WingtipToys").ConnectionString
Dim queryString = "SELECT Id, ProductName FROM dbo.Products;"
Using connection As New SqlConnection(connectionString)
Dim command = New SqlCommand(queryString, connection)
connection.Open()
Using reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine(String.Format("{0}, {1}", reader(0), reader(1)))
End While
End Using
End Using
End Sub
End Module
Uwagi
Klasa ConfigurationManager umożliwia uzyskiwanie dostępu do informacji o konfiguracji komputera, aplikacji i użytkownika. Ta klasa zastępuje klasę ConfigurationSettings, która jest przestarzała. W przypadku aplikacji internetowych użyj klasy WebConfigurationManager.
Aby użyć klasy ConfigurationManager, projekt musi odwoływać się do zestawu System.Configuration
. Domyślnie niektóre szablony projektów, takie jak Aplikacja konsolowa, nie odwołują się do tego zestawu, dlatego należy go ręcznie odwołać.
Nuta
Nazwa i lokalizacja pliku konfiguracji aplikacji zależą od hosta aplikacji. Aby uzyskać więcej informacji, zobacz Configuring Apps by using Configuration Files.
Możesz użyć wbudowanych typów System.Configuration lub pochodzących z nich do obsługi informacji o konfiguracji. Korzystając z tych typów, można pracować bezpośrednio z informacjami o konfiguracji i rozszerzyć pliki konfiguracji w celu uwzględnienia informacji niestandardowych.
Klasa ConfigurationManager zawiera elementy członkowskie, które umożliwiają wykonywanie następujących zadań:
Przeczytaj sekcję z pliku konfiguracji. Aby uzyskać dostęp do informacji o konfiguracji, wywołaj metodę GetSection. W niektórych sekcjach, takich jak
appSettings
iconnectionStrings
, użyj klas AppSettings i ConnectionStrings. Te elementy członkowskie wykonują operacje tylko do odczytu, używają pojedynczego buforowanego wystąpienia konfiguracji i są świadomi wielowątkowość.Odczytywanie i zapisywanie plików konfiguracji jako całości. Aplikacja może odczytywać i zapisywać ustawienia konfiguracji na dowolnym poziomie, dla siebie lub dla innych aplikacji lub komputerów, lokalnie lub zdalnie. Użyj jednej z metod udostępnianych przez klasę ConfigurationManager, aby otworzyć plik konfiguracji, taki jak SampleApp.exe.config. Te metody zwracają obiekt Configuration, który z kolei uwidacznia metody i właściwości, których można użyć do pracy ze skojarzonymi plikami konfiguracji. Metody wykonują operacje odczytu lub zapisu i tworzą dane konfiguracji za każdym razem, gdy plik jest zapisywany.
Obsługa zadań konfiguracji. Do obsługi różnych zadań konfiguracyjnych służą następujące typy:
Oprócz pracy z istniejącymi informacjami o konfiguracji można tworzyć niestandardowe elementy konfiguracji i pracować z nimi, rozszerzając wbudowane typy konfiguracji, takie jak ConfigurationElement, ConfigurationElementCollection, ConfigurationPropertyi ConfigurationSection klasy. Aby zapoznać się z przykładem programowego rozszerzania wbudowanego typu konfiguracji, zobacz ConfigurationSection. Aby zapoznać się z przykładem rozszerzania wbudowanego typu konfiguracji korzystającego z modelu opartego na atrybutach, zobacz ConfigurationElement.
Uwagi dotyczące dziedziczenia
Klasa Configuration umożliwia dostęp programowy do edycji plików konfiguracji. Użyj jednej z metod Open
udostępnianych przez ConfigurationManager. Te metody zwracają obiekt Configuration, który z kolei udostępnia wymagane metody i właściwości do obsługi bazowych plików konfiguracji. Dostęp do tych plików można uzyskać do odczytu lub zapisu.
Aby odczytać pliki konfiguracji, użyj GetSection(String) lub GetSectionGroup(String). Użytkownik lub proces odczytu musi mieć następujące uprawnienia:
Uprawnienie do odczytu w pliku konfiguracji na bieżącym poziomie hierarchii konfiguracji.
Uprawnienia do odczytu dla wszystkich nadrzędnych plików konfiguracji.
Jeśli aplikacja wymaga dostępu tylko do odczytu do własnej konfiguracji, zalecamy użycie metody GetSection(String). Ta metoda zapewnia dostęp do buforowanych wartości konfiguracji dla bieżącej aplikacji, która ma lepszą wydajność niż klasa Configuration.
Aby zapisać w plikach konfiguracji, użyj jednej z metod Save. Użytkownik lub proces zapisu musi mieć następujące uprawnienia:
Uprawnienia do zapisu w pliku konfiguracji i katalogu na bieżącym poziomie hierarchii konfiguracji.
Uprawnienia do odczytu dla wszystkich plików konfiguracji.
Właściwości
AppSettings |
Pobiera dane AppSettingsSection dla domyślnej konfiguracji bieżącej aplikacji. |
ConnectionStrings |
Pobiera dane ConnectionStringsSection dla domyślnej konfiguracji bieżącej aplikacji. |
Metody
GetSection(String) |
Pobiera określoną sekcję konfiguracji dla domyślnej konfiguracji bieżącej aplikacji. |
OpenExeConfiguration(ConfigurationUserLevel) |
Otwiera plik konfiguracji dla bieżącej aplikacji jako obiekt Configuration. |
OpenExeConfiguration(String) |
Otwiera określony plik konfiguracji klienta jako obiekt Configuration. |
OpenMachineConfiguration() |
Otwiera plik konfiguracji maszyny na bieżącym komputerze jako obiekt Configuration. |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean) |
Otwiera określony plik konfiguracji klienta jako obiekt Configuration, który używa określonego mapowania pliku, poziomu użytkownika i wstępnego ładowania. |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel) |
Otwiera określony plik konfiguracji klienta jako obiekt Configuration, który używa określonego mapowania pliku i poziomu użytkownika. |
OpenMappedMachineConfiguration(ConfigurationFileMap) |
Otwiera plik konfiguracji maszyny jako obiekt Configuration, który używa określonego mapowania plików. |
RefreshSection(String) |
Odświeża nazwaną sekcję, aby następnym razem, gdy zostanie pobrana, zostanie ponownie odczytany z dysku. |