Ivan Franco

Web.config - independizar configuraciones

¿Cuántas veces hemos visto en la configuración de deploy de una solución web la regla de excluir el web.config?

Machines

Es importante abstraer las configuraciones dependientes de un ambiente puntual de la configuración general del proyecto para su correcto funcionamiento.

A continuación mostraré cómo podemos extraer a un archivo separado la configuración de logueo, conexión a la Base de Datos y AppSettings particulares.

Logging — log4net

Para el caso que voy a mostrar, utilizamos log4net como herramienta de logging.

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

<log4net configSource="log4net.config"/>

Generamos dentro del tag configuration , una nueva sección llamada log4net, la cual indicamos que tomará la información de configuración de la herramienta desde el archivo log4net.config.

Connection Strings

Por otro lado, para trasladar la configuración de connection string a otro archivo, lo podemos realizar de la siguiente manera:

<connectionStrings configSource="connections.config"/>

A la ya existente sección del web.config connectionStrings, le indicamos como property configSource el archivo que tiene la configuración definitiva.

Luego, el archivo connections.config tiene la configuración tal como la teníamos originalmente:

<connectionStrings>
  <add name="ConexionDB1" connectionString="Data Source=DBInstance;Initial Catalog=DB1;Integrated Security=True;" />
  <add name="ConexionDB2" connectionString="Data Source=DBInstance;Initial Catalog=DB2;Integrated Security=True;" />
</connectionStrings>

AppSettings

Por último, para trasladar algunas AppSettings a un archivo distinto y mantener otras en el web.config, realizamos la siguiente configuración:

<appSettings file=”PrivateSettings.config”>
  <add key="Key1" value="Value1"/>
</appSettings>

Donde el archivo PrivateSettings.config contiene las AppSettings restantes

<appSettings>
  <add key="Key2" value="Value2" />
  <add key="Key3" value="Value3" />
</appSettings>

Observaciones

Como se puede observar, para la configuración tanto de log4net como la de connectionStrings se utiliza la propiedad configSource , la misma define que toda la configuración se encuentra en el archivo referenciado y no hay posibilidad de incluir información adicional.

Para el caso de las AppSettings se utilizó la propiedad file , la cual permite integrar las referenciadas en el archivo externo junto con las que se encuentran en el web.config. De esta manera, se permite tener keys comunes a los ambientes y keys dependientes del ambiente.