2012-03-06 26 views
7

lo que estoy tratando de hacer es para mi archivo App.config tengo un montón de configuraciones, y lo que quiero hacer es dividir mi archivo de configuración en diferentes archivos. Por ejemplo; mi archivo de archivo app.config tiene una configuración relacionada con los correos electrónicos, por lo que quiero quitar esos ajustes y almacenarlos en un archivo email.config y luego en mi archivo app.config usar el atributo configSource para agregar estas configuraciones desde el correo electrónico.config archivo y agréguelo al nodo de configuración de la aplicación. es posible?Cómo tener diferentes partes del archivo de configuración en C#

En caso afirmativo, por favor, consejos sobre cómo lograr el resultado anterior.

Muchas gracias.

así por ejemplo tengo otro archivo de configuración llamado app1.config y tiene el siguiente código XML:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings > 
    <add key="l" value="test"/> 
    </appSettings> 
</configuration> 

y después de mi archivo principal app.config tener una referencia al archivo y luego desde app1.config código de ser capaz de hacer esto para conseguir el valor de la aplicación de configuración de clave:

var x = ConfigurationManager.AppSettings["l"]; 

Respuesta

6

Edición para reflejar cambiada de preguntas y comentarios adicionales :

Para configuraciones personalizadas definidas en la parte <appSettings> del archivo de configuración no es un atributo file que puede contener la ruta a un archivo que anula los parámetros AppSettings: http://www.codeproject.com/Articles/8818/Using-the-File-attribute-of-the-appSettings-elemen

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<appSettings file="settings.config"> 
</appSettings> 
</configuration>` 

Puede de hecho también utilizar el atributo configSource, como se especifica en la documentación de MSDN:

http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx

la propiedad configSource representa el valor del atributo configSource que se especifica para un objeto ConfigurationSection que está asociado con el objeto SectionInformation.

Una implementación de ConfigurationSection puede especificar opcionalmente un archivo separado en el que se definen los parámetros de configuración para esa sección. Esto puede ser útil de múltiples maneras:

El uso de archivos incluidos puede dar como resultado una estructura más lógica y modular para los archivos de configuración.

La seguridad y los permisos de acceso a archivos se pueden usar para restringir el acceso a secciones de configuración.

Las configuraciones en un archivo de inclusión que no se usan durante la inicialización de la aplicación se pueden modificar y volver a cargar sin requerir el reinicio de una aplicación.

El siguiente ejemplo muestra cómo se utiliza este atributo en un archivo de configuración para especificar que la sección de las páginas se define en una externa archivo de inclusión:

<pages configSource="pages.config"/>

O, si desea almacenar información desde la misma sección en archivos separados, siempre puede volver a usar ConfigurationManager.Open ... Funciones de configuración y leer las configuraciones de forma programática: http://msdn.microsoft.com/en-us/library/ms134262.aspx

+0

Hola, gracias por esto, lo he intentado, pero no obtengo el valor, vuelve como nulo. Aquí está mi archivo de configuración externo llamado App1.config, y solo contiene: y mi sección de configuración de la aplicación configs principal que se ve como este: y en mi código detrás estoy haciendo esto: var x = ConfigurationManager.AppSettings [" d "]; pero está obteniendo valores nulos y no el valor. Por favor asista. es avance – johnnie

+0

Bien, ¡muchas gracias por esto, ha funcionado! :) ¿Pero puedo especificar múltiples archivos de configuración externos? En caso afirmativo, ¿podría asesorar sobre cómo lograr esto? Gracias de antemano. – johnnie

+0

Acabo de intentarlo de nuevo y me funciona, ¿está seguro de que el archivo App1.config está en su lugar (el mismo directorio que el programa)? Para un programa de consola, por ejemplo, esto significa que debe establecer la configuración 'Copiar en el directorio de salida' en 'Copiar siempre' – Dirk

4

Usted puede utilizar el construido en la sección de configuración para smtp settings en un fichero de su propia:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="network"> 
     <network 
      host="localhost" 
      port="25" 
      defaultCredentials="true" 
     /> 
     </smtp> 
    </mailSettings> 
</system.net> 

Esto se puede consultar en su app.config usando configSource.

Puede limitar esto a la sección smtp solo, si quieres:

<system.net> 
    <mailSettings> 
     <smtp configSource="smtp.config" /> 
    </mailSettings> 
</system.net> 
+0

Gracias por eso, pero el correo electrónico fue sólo un ejemplo. Necesito dividirlo para cualquier cosa y luego solo hacer referencia al archivo app.config. – johnnie

+0

@johnnie - Si la configuración está definida en una sección de configuración, puede hacerlo. De lo contrario, siempre puede escribir sus propias secciones de configuración para su uso particular y usarlas. Esto no es difícil, como se describe en [este artículo de MSDN] (http://msdn.microsoft.com/en-us/library/2tw134k3.aspx). – Oded

0

Usted puede hacer esto mediante el atributo configSource:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<connectionStrings configSource="cs.config" /> 
</configuration> 
0

ConfigSource maps an enti re sección a un archivo externo. Una vez que lo haya agregado, ya no podrá usar la sección en el archivo de configuración raíz. tampoco puede tener más de un mapeo por sección.

Puede crear una sección de configuración personalizada, como se sugirió anteriormente, con las secciones que desea asignar & y luego asignar cada sección por turno.

web.config:

<myConfig> 
    <mysection1 file="section1.config"/> 
    <mysection2 file="section2.config"/> 
</myConfig> 

section1.config:

<mysection1> 
    <add key="key1" value="val1"/> 
</mysection1> 
Cuestiones relacionadas