2010-12-15 41 views
17

Estoy creando un proyecto de biblioteca de clase. Ahora, de forma predeterminada, tengo un archivo App.Config para poner todos los datos específicos del entorno en ese archivo de configuración.Múltiples archivos App.Config en el proyecto de la biblioteca de clase .NET

Ahora basado en el medio ambiente (ya sea de desarrollo/pruebas/Producción), estoy planeando tener tres archivos app.config en VS 2010 como

App.Dev.Config 

App.Test.Config 

App.Prod.Config 

pregunta cómo sería la aplicación saber qué archivo de configuración para utilizar.

Cualquiera implementó este escenario. Cualquier código de muestras/artículos sería útil.

Gracias

Respuesta

15

La aplicación va a utilizar el archivo de configuración llamado YourExcecutable.exe.config que es por defecto el archivo app.config incluido en su proyecto (ejecutable). Tenga en cuenta que .NET solo carga un archivo de configuración para toda la aplicación. No puede usar varios archivos de configuración (es decir, uno por proyecto de biblioteca) sin codificación.

  1. Opción: Puede utilizar eventos postbuild y diferentes configuraciones de soluciones para copiar uno o presentar otra app.config a la carpeta de salida

  2. Opción: Se puede utilizar la clase ConfigurationManager para cargar un archivo de configuración alternativo por código

+7

+1: y para ser muy claros aquí: NUNCA se usarán los archivos de configuración asociados con un proyecto de ensamblaje. Solo se usarán los archivos de configuración del proyecto principal. Necesitas controlarlos en ese nivel. – NotMe

+0

@NotMe: Sé que es un poco más explícito de lo que tenía en mente, pero hay formas de incluir archivos de configuración de la biblioteca. Déles un nombre único, configúrelos para que se copien en el directorio de salida y haga que el app.config de su proyecto de inicio los referencia como un enlace externo. – Flater

4

Carga de un archivo de configuración de aplicación diferente en tiempo de ejecución se puede hacer usando el archivo de configuración mapeado. Necesita agregar referencia a System.Configuration.dll en su proyecto.

Establezca el valor de Copy to Output Directory propiedad de todos los archivos de configuración adicionales (por ejemplo, App1.config, App2.config etc.) otros tha n el predeterminado (App.config) a Copy if newer. De esta forma, estarán disponibles en el directorio de salida del proyecto (\ bin \ debug) una vez que se haya construido el proyecto. El valor predeterminado de esta propiedad es Do not copy.

enter image description here

Aquí es el fragmento de código en la forma de leer los datos de configuración de los archivos de configuración no predeterminada:

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
configFileMap.ExeConfigFilename = "App1.config"; // app1.config should be present in root directory from where application exe is kicked off 

// Get the mapped configuration file 
var config = ConfigurationManager.OpenMappedExeConfiguration( 
     configFileMap, ConfigurationUserLevel.None); 

//get the relevant section from the config object 
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings"); 

//get key value pair 
var keyValueConfigElement = section.Settings["appSettingsKey"]; 
var appSettingsValue = keyValueConfigElement.Value; 

Si tiene varios archivos de configuración de aplicaciones a continuación, puede tener una configuración en forma predeterminada App.config archivo con la ayuda de la cual puede tomar una decisión en tiempo de ejecución sobre qué archivo de configuración adicional cargar, por ejemplo App1.config

Nota: Tenga en cuenta que el código como sigue ConfigurationManager.AppSettings["DeployEnv"] leerá los datos del archivo por defecto App.config.Este comportamiento no puede ser cambiado. No se puede prohibir la carga del archivo predeterminado App.config. Debe usar medios alternativos como se muestra arriba para leer los datos de los archivos de configuración no predeterminados

Cuestiones relacionadas