ConfigurationManager Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет доступ к файлам конфигурации для клиентских приложений. Этот класс не наследуется.
public ref class ConfigurationManager abstract sealed
public static class ConfigurationManager
type ConfigurationManager = class
Public Class ConfigurationManager
- Наследование
-
ConfigurationManager
Примеры
В первом примере показано простое консольное приложение, которое считывает параметры приложения, добавляет новый параметр и обновляет существующий параметр.
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
В предыдущем примере предполагается, что в проекте есть файл App.config, как показано ниже.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="Setting1" value="May 5, 2014"/>
<add key="Setting2" value="May 6, 2014"/>
</appSettings>
</configuration>
В следующем примере показано, как использовать строка подключения для чтения данных из базы данных.
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
В предыдущем примере предполагается, что проект имеет App.config, как показано ниже.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="WingtipToys" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False" />
</connectionStrings>
</configuration>
Комментарии
Класс ConfigurationManager позволяет получить доступ к сведениям о конфигурации компьютера, приложения и пользователя. Этот класс заменяет ConfigurationSettings класс , который является устаревшим. Для веб-приложений используйте WebConfigurationManager класс .
Чтобы использовать ConfigurationManager класс , проект должен ссылаться на сборку System.Configuration
. По умолчанию некоторые шаблоны проектов, например консольное приложение, не ссылаться на эту сборку, поэтому необходимо ссылаться на нее вручную.
Примечание
Имя и расположение файла конфигурации приложения зависят от узла приложения. Дополнительные сведения см. в разделе Настройка приложений с помощью файлов конфигурации.
Для обработки сведений о конфигурации можно использовать встроенные System.Configuration типы или производные от них. Используя эти типы, вы можете работать непосредственно с сведениями о конфигурации и расширить файлы конфигурации, чтобы включить пользовательские сведения.
Класс ConfigurationManager включает члены, которые позволяют выполнять следующие задачи:
Чтение раздела из файла конфигурации. Чтобы получить доступ к сведениям о конфигурации, вызовите GetSection метод . Для некоторых разделов, таких как
appSettings
иconnectionStrings
, используйте классы AppSettings и ConnectionStrings . Эти члены выполняют операции только для чтения, используют один кэшированный экземпляр конфигурации и имеют многопоточность.Чтение и запись файлов конфигурации в целом. Приложение может считывать и записывать параметры конфигурации на любом уровне для себя или для других приложений или компьютеров локально или удаленно. Используйте один из методов, предоставляемых классом ConfigurationManager , чтобы открыть файл конфигурации, например SampleApp.exe.config. Эти методы возвращают Configuration объект , который, в свою очередь, предоставляет методы и свойства, которые можно использовать для работы со связанными файлами конфигурации. Методы выполняют операции чтения или записи и создают данные конфигурации при каждой записи файла.
Поддержка задач конфигурации. Для поддержки различных задач конфигурации используются следующие типы:
Помимо работы с существующими сведениями о конфигурации, можно создавать пользовательские элементы конфигурации и работать с ними, расширяя встроенные типы конфигурации, такие как ConfigurationElementклассы , ConfigurationElementCollection, ConfigurationPropertyи ConfigurationSection . Пример расширения встроенного типа конфигурации программным способом см. в разделе ConfigurationSection. Пример расширения встроенного типа конфигурации, использующего модель на основе атрибутов, см. в разделе ConfigurationElement.
Примечания для тех, кто наследует этот метод
Класс Configuration обеспечивает программный доступ для редактирования файлов конфигурации. Вы используете один из методов, Open
предоставляемых .ConfigurationManager Эти методы возвращают Configuration объект , который, в свою очередь, предоставляет необходимые методы и свойства для обработки базовых файлов конфигурации. Вы можете получить доступ к этим файлам для чтения или записи.
Для чтения файлов конфигурации используйте GetSection(String) или GetSectionGroup(String). Пользователь или процесс, который считывает данные, должен иметь следующие разрешения:
Разрешение на чтение файла конфигурации на текущем уровне иерархии конфигурации.
Разрешения на чтение для всех родительских файлов конфигурации.
Если приложению требуется доступ только для чтения к собственной конфигурации, рекомендуется использовать GetSection(String) метод . Этот метод предоставляет доступ к кэшируемым значениям конфигурации для текущего приложения, которое имеет лучшую Configuration производительность, чем класс .
Для записи в файлы конфигурации используйте один из Save методов . Пользователь или процесс, который выполняет запись, должен иметь следующие разрешения:
Разрешение на запись в файл конфигурации и каталог на текущем уровне иерархии конфигурации.
Разрешения на чтение для всех файлов конфигурации.
Свойства
AppSettings |
Получает данные AppSettingsSection для конфигурации текущего приложения по умолчанию. |
ConnectionStrings |
Получает данные ConnectionStringsSection для конфигурации текущего приложения по умолчанию. |
Методы
GetSection(String) |
Извлекает указанный раздел конфигурации для конфигурации по умолчанию текущего приложения. |
OpenExeConfiguration(ConfigurationUserLevel) |
Открывает файл конфигурации для текущего приложения в качестве объекта Configuration. |
OpenExeConfiguration(String) |
Открывает указанный файл конфигурации клиента в качестве объекта Configuration. |
OpenMachineConfiguration() |
Открывает файл конфигурации компьютера на текущем компьютере в качестве объекта Configuration. |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel) |
Открывает указанный файл конфигурации клиента в качестве объекта Configuration, который использует указанные сопоставление файлов и уровень пользователя. |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean) |
Открывает указанный файл конфигурации клиента в качестве объекта Configuration, который использует указанное сопоставление файлов, уровень пользователя и параметр предварительной загрузки. |
OpenMappedMachineConfiguration(ConfigurationFileMap) |
Открывает файл конфигурации компьютера в качестве объекта Configuration, который использует указанное сопоставление файлов. |
RefreshSection(String) |
Обновляет раздел с заданным именем, чтобы при следующем извлечении он повторно считывался с диска. |