Поделиться через


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

В следующем примере показано, как использовать строку подключения для чтения данных из базы данных.

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

Комментарии

Класс 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, Boolean)

Открывает указанный файл конфигурации клиента в качестве объекта Configuration, использующего указанное сопоставление файлов, уровень пользователя и параметр предварительной загрузки.

OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel)

Открывает указанный файл конфигурации клиента в качестве объекта Configuration, использующего указанное сопоставление файлов и уровень пользователя.

OpenMappedMachineConfiguration(ConfigurationFileMap)

Открывает файл конфигурации компьютера в качестве объекта Configuration, использующего указанное сопоставление файлов.

RefreshSection(String)

Обновляет именованный раздел так, чтобы при следующем извлечении он будет повторно считываться с диска.

Применяется к

См. также раздел