Configuración dependiente del entorno de despliegue

Esta entrada explica como crear un archivo .config común para toda la aplicación y uno o varios .config con la información dependiente del entorno donde queramos desplegar.

En los ejemplos se explica como configurar un archivo App.config de aplicación de escritorio, pero es igualmente válido para aplicaciones web.

Adecuar archivos de configuración
Los archivos con información dependiente del entorno de despliegue seguirán, por convención, la siguiente nomenclatura AppNomSecccion.Entorno.config. Donde:

  • App: Texto fijo. Se pone este prefijo para que todos los archivos de configuración permanezcan juntos en el explorador de soluciones.
  • NomSeccion: Es el nombre de la sección de la configuración que sacaremos fuera
  • Entorno: Nombre de la configuración de Visual Studio. A continuación se proponen los siguientes mapeos de configuración a sus correspondientes entornos:
    • Debug → Desarrollo
    • QA → Preproducción
    • Release → Producción
  • config: Extensión del archivo. VS permite cualquier extensión pero debe ser .config para que, en aplicaciones web, IIS deniegue el acceso a estos archivos al usuario.
En primer lugar, hay que separar la sección connectionStrings del archivo app.config principal. Lo más sencillo es crear la cadena de conexión de la forma habitual, desde las propiedades del proyecto.

Crear 4 archivos, uno por entorno, más un archivo adicional sin nombre de configuración. Los nombres de los archivos seguirán la nomenclatura anteriormente descrita. Por ejemplo:
  • AppConnections.Debug.config
  • AppConnections.QA.config
  • AppConnections.Release.config
  • AppConnections.config
Abrir el archivo app.config y copiar la sección completa, incluyendo los tags de apertura y cierre.
Copiar el texto seleccionado a cada uno de los archivos. El contenido de los archivos debería quedar como sigue:
<?xml version="1.0" encoding="utf-8" ?>
  <connectionStrings>
  <add name="ConnectionString"
connectionString="Data Source=servidor\instancia;Initial Catalog=bbdd;Persist Security Info=True;User ID=usuario;Password=password;"
providerName="System.Data.SqlClient" />
</connectionStrings>

Donde cada archivo contiene una cadena de conexión específica.

En el archivo app.config sustituir la sección por:
connectionStrings section<connectionStrings configSource="AppConnections.config" />


Configuraciones en Visual Studio
Dentro de Visual Studio, se debe mantener una configuración por cada entorno.
Para crear una nueva configuración:
•Ir al administrador de configuraciones. En la lista de configuraciones seleccionar <Nueva...>
image

•Especificar un nombre para la nueva configuración y seleccionar la configuración que se usará como plantilla.

image


Automatizar el despliegue
Solo queda agregar en el archivo de proyecto las tareas de MsBuild necesarias para copiar el archivo correcto de configuración. Se puede editar el archivo .csproj o, desde Visual Studio siguiendo estos pasos:

  • Seleccionar con el botón derecho el proyecto y hacer clic en 'Descargar'
  • Ahora el icono del proyecto aparece en gris y no se ven los archivos que lo componen.
  • Hacer click nuevamente con el botón derecho sobre el proyecto y seleccionar 'Editar'.
  • Podemos ver el xml del proyecto y aprovechar el intelisense que ofrece Visual Studio.
En la parte inferior podemos ver la sección <Target Name="AfterBuild">. Vemos que está dentro de una zona comentada. Descomentarla.
Agregar las tareas de MsBuild. Debería quedar así:

<Target Name="AfterBuild">
<Message Text="Copiando configuracion especifica de plataforma de despliegue" />
<Delete Files="$(TargetDir)AppConnections.config" />
<Copy SourceFiles="$(ProjectDir)AppConnections.$(Configuration).config" DestinationFiles="$(TargetDir)AppConnections.config" />
</Target>

Comentarios

Entradas populares de este blog

Install NET Core 2.1 SDK on Rasapbian

Actualizar automáticamente la versión del ejecutable con el nº de build de Jenkins

Pasar parámetros dinámicos a Attributes