ConfigurationManager Clase

Definición

Proporciona acceso a los archivos de configuración para las aplicaciones cliente. Esta clase no puede heredarse.

public ref class ConfigurationManager abstract sealed
public static class ConfigurationManager
type ConfigurationManager = class
Public Class ConfigurationManager
Herencia
ConfigurationManager

Ejemplos

En el primer ejemplo se muestra una aplicación de consola sencilla que lee la configuración de la aplicación, agrega una nueva configuración y actualiza una configuración existente.

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  

En el ejemplo anterior se supone que el proyecto tiene un archivo App.config como se muestra a continuación.

<?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>  

En el ejemplo siguiente se muestra cómo usar una cadena de conexión para leer datos de una base de datos.

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  

En el ejemplo anterior se supone que el proyecto tiene un App.config como se muestra a continuación.

<?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>  

Comentarios

La ConfigurationManager clase le permite acceder a la información de configuración del equipo, la aplicación y el usuario. Esta clase reemplaza a la ConfigurationSettings clase , que está en desuso. Para las aplicaciones web, use la WebConfigurationManager clase .

Para usar la ConfigurationManager clase , el proyecto debe hacer referencia al System.Configuration ensamblado. De forma predeterminada, algunas plantillas de proyecto, como aplicación de consola, no hacen referencia a este ensamblado, por lo que debe hacer referencia manualmente a él.

Nota

El nombre y la ubicación del archivo de configuración de la aplicación dependen del host de la aplicación. Para obtener más información, consulte Configuración de aplicaciones mediante archivos de configuración.

Puede usar los tipos integrados System.Configuration o derivarlos de ellos para controlar la información de configuración. Con estos tipos, puede trabajar directamente con la información de configuración y puede ampliar los archivos de configuración para incluir información personalizada.

La ConfigurationManager clase incluye miembros que permiten realizar las siguientes tareas:

  • Lea una sección de un archivo de configuración. Para acceder a la información de configuración, llame al GetSection método . Para algunas secciones, como appSettings y connectionStrings, use las AppSettings clases y ConnectionStrings . Estos miembros realizan operaciones de solo lectura, usan una única instancia almacenada en caché de la configuración y son compatibles con varios subprocesos.

  • Leer y escribir archivos de configuración en su conjunto. La aplicación puede leer y escribir opciones de configuración en cualquier nivel, para sí misma o para otras aplicaciones o equipos, de forma local o remota. Use uno de los métodos proporcionados por la ConfigurationManager clase para abrir un archivo de configuración como SampleApp.exe.config. Estos métodos devuelven un Configuration objeto que, a su vez, expone métodos y propiedades que puede usar para trabajar con los archivos de configuración asociados. Los métodos realizan operaciones de lectura o escritura y crean los datos de configuración cada vez que se escribe un archivo.

  • Admitir tareas de configuración. Los siguientes tipos se usan para admitir varias tareas de configuración:

    Además de trabajar con información de configuración existente, puede crear y trabajar con elementos de configuración personalizados mediante la extensión de los tipos de configuración integrados, como las ConfigurationElementclases , ConfigurationElementCollection, ConfigurationPropertyy ConfigurationSection . Para obtener un ejemplo de cómo ampliar un tipo de configuración integrado mediante programación, vea ConfigurationSection. Para obtener un ejemplo de cómo extender un tipo de configuración integrado que usa el modelo basado en atributos, vea ConfigurationElement.

Notas a los desarrolladores de herederos

La Configuration clase habilita el acceso mediante programación para editar archivos de configuración. Use uno de los Open métodos proporcionados por ConfigurationManager. Estos métodos devuelven un Configuration objeto , que a su vez proporciona los métodos y propiedades necesarios para controlar los archivos de configuración subyacentes. Puede acceder a estos archivos para leer o escribir.

Para leer los archivos de configuración, use GetSection(String) o GetSectionGroup(String). El usuario o proceso que lee debe tener los permisos siguientes:

  • Permiso de lectura en el archivo de configuración en el nivel de jerarquía de configuración actual.

  • Permisos de lectura en todos los archivos de configuración primarios.

Si la aplicación necesita acceso de solo lectura a su propia configuración, se recomienda usar el GetSection(String) método . Este método proporciona acceso a los valores de configuración almacenados en caché para la aplicación actual, que tiene un mejor rendimiento que la Configuration clase .

Para escribir en los archivos de configuración, use uno de los Save métodos . El usuario o proceso que escribe debe tener los permisos siguientes:

  • Permiso de escritura en el archivo de configuración y el directorio en el nivel de jerarquía de configuración actual.

  • Permisos de lectura en todos los archivos de configuración.

Propiedades

AppSettings

Obtiene los datos AppSettingsSection para la configuración predeterminada de la aplicación actual.

ConnectionStrings

Obtiene los datos ConnectionStringsSection para la configuración predeterminada de la aplicación actual.

Métodos

GetSection(String)

Recupera una sección de configuración especificada para la configuración predeterminada de la aplicación actual.

OpenExeConfiguration(ConfigurationUserLevel)

Abre el archivo de configuración para la aplicación actual como un objeto Configuration.

OpenExeConfiguration(String)

Abre el archivo de configuración de cliente especificado como un objeto Configuration.

OpenMachineConfiguration()

Abre el archivo de configuración del equipo como un objeto Configuration en el equipo actual.

OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel)

Abre el archivo de configuración de cliente especificado como un objeto Configuration que utiliza la asignación de archivos y el nivel de usuario indicados.

OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean)

Abre el archivo de configuración de cliente especificado como un objeto Configuration que usa la asignación de archivos, nivel de usuario y opción de carga previa.

OpenMappedMachineConfiguration(ConfigurationFileMap)

Abre el archivo de configuración del equipo como un objeto Configuration que utiliza la asignación de archivos especificada.

RefreshSection(String)

Actualiza la sección con nombre para que se vuelva a leer desde el disco la próxima vez que se recupere.

Se aplica a

Consulte también