Una de las utilidades que contamos los desarrolladores web en Visual Studio 2010 y que por mi experiencia veo que no se utiliza mucho. Es la transformación de ficheros de configuración.
A quien no le ha pasado que ha realizado un despliegue al entorno de producción y se ha dejado el modo debug activado o la cadena de conexión a la de test. Pues Visual Studio nos permite poder evitar esto de una manera muy fácil y además automática, para que no nos tengamos que preocupar de si lo hemos configurado todo correctamente para el despliegue.
Ficheros de Transformación
Una de las situaciones que habitualmente nos encontramos en los proyectos, es que tenemos que tener diferentes ficheros de configuración para cada uno de los entornos de los que contamos.
No es lo mismo hacer un despliegue para el entorno de Desarrollo que para Pre-Test o Producción. Por eso ahora disponemos de la posibilidad de modificar el fichero de configuración dependiendo de donde queramos publicar nuestra aplicación web.
Lo primero que tenemos que hacer es crear una configuración de compilación que la podemos definir por ejemplo para cada entorno en el que trabajaremos con las diferentes configuraciones.
Podemos crear una configuración nueva o copiar de otra existente.
Una vez que tengamos las configuraciones creadas, hacemos clic con el botón derecho en el fichero de configuración y añadimos los nuevos ficheros de transformación.
Tendemos que tener tantos ficheros de transformación como diferentes configuraciones necesitemos en nuestros despliegues.
¿Qué son los ficheros de Transformación?
Los ficheros de transformación, son ficheros XML que utilizan los atributos XML para especificar que se tienen que modificar o eliminar del fichero web.config.
Por ejemplo el fichero de transformación de la publicación en Release elimina el famoso atributo Debug=true.
[sourcecode language=»xml»]
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
[/sourcecode]
XML-Document-Transform
Este espacio de nombres tiene dos propiedades Principales:
- Locator:Se seleccionan los elementos que coinciden con la expresión XPath combinada.
- Locator=»Match(key)» – Selecciona los elementos que concidan con el atributo key.
- Transform:Especifica la transformación de elemento o elementos seleccionados con la propiedad locator.
- Replace: Sustituye el elemento o primer elemento seleccionado por el informado.
- Insert: Inserta un nuevo elemento como podría ser una nueva cadena de conexión, al final de la colección.
- InsertBefore: Inserta un nuevo elemento justo antes del elemento seleccionado.
- InsertAfter: Inserta un nuevo elemento justo después del elemento seleccionado.
- Remove: Elimina el elemento o primer elemento seleccionado.
- RemoveAll: Elimina todos los elementos seleccionados.
- RemoveAttributes: elimina el atributo especificado de los elementos seleccionados.
- SetAttributes: Modifica los atributos especificados de los elementos seleccionados.
Los ejemplos más utilizados serían:
- Modificar el valor de una propiedad personalizada de la configuración por su clave.
[sourcecode language=»xml»]
<add key="UrlEscritura" value="http://test/ Solicitudes/ServicioEscritura.svc" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
[/sourcecode]
- Modificar una cadena de conexión por su nombre: perfecto si atacamos a diferentes bases de datos en cada entorno.
[sourcecode language=»xml»]
<connectionStrings>
<add name="SqlCon" connectionString="Data Source=server;Initial Catalog=test;" providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
[/sourcecode]
- Eliminar el famoso atributo de modo Debug cuando compliamos en Release:
[sourcecode language=»xml»]
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
[/sourcecode]
Conclusión
Si nos preocupamos un poco en tener diferentes configuraciones de compilación para nuestros entornos, además de facilitarnos los despliegues y su configuración de forma automática.
También nos evita los típicos errores por descuido que tantos problemas nos suelen dar en los despliegues.