La transformation de configuration avec ASP.NET

Explorateur de fichiers - Web.configJe me suis récemment penché sur un sujet qui m’intéresse depuis longtemps : la transformation de configuration avec ASP.NET. Ce terme abstrait n’évoque peut être rien de familier au premier abord, mais vous y aviez sûrement déjà songé si vous ne vous en servez pas encore. Il s’agît tout simplement d’automatiser le changement de paramétrage suivant l’environnement de déploiement en se basant sur le fichier Web.config. Par défaut, Visual Studio propose deux profils (Debug et Release) ainsi que les fichiers Web.Debug.config et Web.Release.config qui les accompagnent, mais il possible d’en rajouter.

A quoi ça sert ?

Pour mieux comprendre prenons par un exemple un système de log. Si votre application est équipée d’un tel dispositif (et elle devrait l’être, si ce n’est pas encore le cas je vous recommande l’excellent log4net), il est fort probable que vous souhaitiez enregistrer d’avantage d’informations sur les environnements de développement et de test que sur ceux de productions. Vous utiliserez donc des niveaux de logs permettant de choisir le niveau d’information que vous souhaitez enregistrer. Mais gérer ce type de paramètre manuellement en fonction de l’environnement de publication serait vite contraignant et source d’erreur. C’est là qu’intervient la transformation de configuration avec ASP.NET.

Comment le mettre en place ?

Nous l’avons vu avant, les fichiers Web.Debug.config et Web.Release.config sont déjà créés par Visual Studio et placés sous la racine que représente le Web.config que vous avez déjà l’habitude d’utiliser. Ces fichiers sont tous trois des fichiers XML, mais les fichiers de Web.Deubg.config et Web.Release.config vont s’appuyer sur un référentiel XDT (XML Document Transform, sorte XSLT revisité par Microsoft) pour transformer le fichier Web.config d’origine.

Ce dernier ne sera donc pas automatiquement remplacé ou écrasé par un autre fichier mais bien transformé suivant les indications présentes dans les fichiers spécifiques. Autre particularité, votre application doit faire l’objet d’un déploiement pour que les fichiers Web.Deubg.config et Web.Release.config, une simple génération sur l’IIS Express de votre environnement de développement ne sera pas suffisante.

Concrètement si vous souhaitez modifier un couple clé-valeur présent dans les appSettings de votre Web.config lorsque votre applicaiton tourne en Release, vous pourriez utiliser le code ci-dessous dans votre fichier Web.Release.config. Celui-ci va rechercher la correspondance sur la clé d’un élément contenu dans les appSettings (attribut xdt:Locator= »Match(key) ») puis procéder à son remplacement complet (attribut xdt:Transform= »Replace »).

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="LogLevel" value="ERROR" xdt:Transform="Replace" xdt:Locator="Match(key)" />
  </appSettings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

J’ai bien dit vous « pourriez » car il existe plusieurs façons (plus ou moins adaptées suivant les cas d’utilisation) de transformer le Web.config. Tous les attributs de transformation sont listés sur le MSDN, libre à vous de rechercher et d’utiliser le plus adpté à vos besoins.

Fichiers Web.config

J’ai précédemment évoqué le fait que le IIS Express de votre environnement de développement n’appliquait pas les transformations peut importe le mode de génération choisi, il existe bien entendu des solutions de contournement, la plus simple étant de placer sa configuration de développement dans le Web.config qui lui est toujours pris en compte, laissant les autres configurations pour les cas où vous effectuerez une réelle publication.

Si vous souhaitez plus d’information sur la transformation de configuration avec ASP.NET, je vous invite à consulter la documentation officielle.

Pour une gestion plus complète du cycle de vie de l’application (ALM), vous pouvez envisager l’utilisation de Release Management pour Visual Studio.

Facebooktwitterlinkedinmail

1 Commentaire

  1. Christophe Gigax

    C’est dommage qu’avec la prochaine version d’ASP.NET tout ceci ne sera plus d’actualité ^^

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.