read net injection iconfiguration dependency connectionstring asp app .net asp.net configuration

.net - net - iconfiguration



El mejor enfoque para configurar mĂșltiples aplicaciones.Net (5)

Consulte el marco de prismas del grupo de patrones y prácticas de Microsofts.

Tenemos un conjunto de aplicaciones .Net 3.5 interconectadas. Algunos son sitios web, algunos son servicios web y otros son aplicaciones de Windows. Cada aplicación tiene actualmente su propio archivo de configuración (app.config o web.config), y actualmente hay algunas claves duplicadas en los archivos de configuración (que en este momento se mantienen sincronizados manualmente) ya que varias aplicaciones requieren el mismo valor de configuración. Además, este conjunto de aplicaciones se implementa a través de varios envrionemnts (desarrollo, prueba, vivo, etc.)

¿Cuál es el mejor enfoque para administrar la configuración de estas múltiples aplicaciones desde una sola fuente de configuración, por lo que los valores de configuración se pueden compartir entre varias aplicaciones si es necesario? También nos gustaría tener configuraciones separadas para cada entorno (por lo que al implementar no tienes que cambiar manualmente ciertos valores de configuración que son específicos del entorno, como las cadenas de conexión), pero al mismo tiempo no deseas mantener múltiples configuraciones grandes archivos (uno para cada entorno) como mantener esto sincronizado al agregar nuevas claves de configuración resultará problemático.


Puede dividir App.config en varios archivos de configuración. Usted solo especifica el nombre del archivo que contiene la sección de configuración.

Cambiar app.config:

<SomeConfigSection> <SettingA/> <SettingB/> </SomeConfigSection> <OtherSection> <SettingX/> </OtherSection>

En app.config y SomeSetting.xml:

<SomeConfigSection file="SomeSetting.xml" /> <OtherSection file="Other.xml" />

Donde SomeSetting.xml contiene:

Ahora puede componer su app.config a partir de diferentes archivos de sección con algún tipo de script de compilación o implementación. P.ej:

if debug copy SomeSettingDebug.xml deploydir/SomeSetting.xml if MySql copy OtherSectionMySql.xml deploydir/OtherSetting.xml


Usamos plantillas de archivos como MyApp.config.template y MyWeb.config.template con propiedades NAnt para los bits que son diferentes entre entornos. Por lo tanto, el archivo de la plantilla podría verse así:

<MyAppConfig> <DbConnString>${DbConnString}</DbConnString> <WebServiceUri uri="${WebServiceUri}" /> </MyAppConfig>

Durante una compilación, generamos todas las configuraciones para los distintos entornos simplemente recorriendo cada entorno en un script NAnt, cambiando el valor de las propiedades NAnt $ {DbConnString} y $ {WebServiceUri} para cada entorno (de hecho, todas están configuradas en un único archivo con secciones para cada entorno) y haciendo una copia NAnt con la opción de expandir propiedades activadas.

Nos tomó un poco de tiempo configurarlo, pero nos ha devuelto al menos diez veces la cantidad de tiempo ahorrada jugando con diferentes versiones de archivos de configuración.


Visual Studio tiene una función relativamente oscura que le permite agregar elementos existentes como enlaces, lo que debería lograr lo que está buscando. Consulte la publicación de Derik Whittaker sobre este tema para obtener más detalles.

Visual Studio realmente debería hacer que esta opción sea más visible. Nadie realmente piensa hacer clic en esa pequeña flecha al lado del botón "Agregar".