2008-09-25 9 views
10

J'ai besoin de basculer entre 3 environnements différents lors du développement de mon application Web - Développement, UAT et Prod. J'ai différentes connexions de base de données dans mes fichiers de configuration pour tous 3. J'ai vu la commutation de ces paramètres manuellement en changeant toutes les références, puis en reconstruisant la solution, et aussi avec les directives du préprocesseur. Existe-t-il un moyen facile de le faire en fonction d'une variable afin que la configuration ne doive pas être révisée lors du déploiement dans un nouvel environnement à chaque fois?Meilleure façon de basculer la configuration entre les environnements de développement/UAT/Prod dans ASP.NET?

Répondre

11

Pour moi, il semble que vous pouvez bénéficier des Visual Studio 2005 Web Deployment Project s. Avec cela, vous pouvez lui indiquer de mettre à jour/modifier des sections de votre fichier web.config en fonction de la configuration de construction.

Jetez un oeil à this blog entry from Scott Gu pour un aperçu rapide/échantillon.

+0

Celui-ci a offert le moins de friction et de délai, et j'ai été en mesure de le mettre en marche assez rapidement.Merci pour votre aide! –

+0

Pas de problème, content –

1

J'ai adopté le Jean Paul Boodhoo Method de configurations changeantes. L'idée générale est d'avoir un ou plusieurs fichiers TEMPLATE de configuration TOKENIZED au lieu des fichiers de configuration eux-mêmes. Vous disposez ensuite d'une tâche de script de génération qui remplace les jetons par des valeurs provenant d'un fichier de propriétés local SINGLE. Ce fichier de propriétés contient toutes les différences de configuration et est unique par copie de travail.

Ce système a fonctionné très bien pour moi et une fois la configuration initiale est un jeu d'enfant pour gérer les changements d'environnement.

3

Je suis un grand fan de l'utilisation MSBuild, en particulier les tâches communautaires MSBuild (http://msbuildtasks.tigris.org/) et il y a une tâche XSLT pour transformer le web.config avec les paramètres de chaîne de connexion appropriés, etc.

Je garde ces tâches pratiques:

<Target Name="Configs"> 
<Xslt RootTag="" Inputs="web.config" Output="Web.$(COMPUTERNAME).config" Xsl="web.config.$(COMPUTERNAME).xslt" Condition="Exists('web.config.$(COMPUTERNAME).xslt')" /> 

il est évident que ce n'est pas 100% ce que vous êtes après, il est si chaque dev peut avoir leur propre web.c onfig.

Mais il n'y a aucune raison que vous ne puissiez pas utiliser le principe ci-dessus pour avoir plusieurs configurations de construction qui appliquent le bon XSLT.

Mon XSLT ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 

<!-- Dev --> 
<xsl:template match="/configuration/connectionStrings/add[@name='MyConnectionString']/@connectionString"> 
    <xsl:attribute name="connectionString">Data Source=MyServer;Initial Catalog=MyBD;User ID=user;password=pwd</xsl:attribute> 
</xsl:template> 
<xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

+0

J'ai regardé dans MSBuild et/ou NA nt comme ma prochaine chose à apprendre, mais n'ont pas encore commencé. Je sais que j'ai besoin de !! –

+0

Ma réponse renvoie à une série d'articles de blog qui enseignent comment automatiser une construction avec NAnt. Vous pouvez trouver un endroit utile pour commencer. – Gilligan

+0

Je n'ai aucune expérience avec NAnt, qu'offre-t-elle par-dessus MSBuild? –

2

Vous pouvez toujours utiliser NAnt + NAnt.Contrib pour modifier le web.config lors de la construction. NAnt possède des tâches xmlpeek et xmlpoke qui vous permettent de mettre à jour des fichiers xml.

par exemple.

< fichier xmlpoke = "$ {} dist.dir /Web.config" XPath = "/ configuration/applicationSettings/MyProj.Web.Properties.Paramètres/paramètre [@name = 'MyProj_Web_Service']/valeur " value =" http: // $ {AppServer} /Service.asmx "/ >

Questions connexes