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


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)

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

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

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