2008-09-25 15 views
10

Necesito cambiar entre 3 entornos diferentes al desarrollar mi aplicación web: desarrollo, UAT y Prod. Tengo diferentes conexiones de bases de datos en mis archivos de configuración para todos 3. He visto cambiar estas configuraciones manualmente cambiando todas las referencias y luego reconstruyendo la solución, y también con las directivas de preprocesador. ¿Existe una forma fácil de hacerlo basada en alguna variable para que la configuración no tenga que ser revisada al implementar en un nuevo entorno cada vez?¿La mejor manera de cambiar la configuración entre entornos de Desarrollo/UAT/Prod en ASP.NET?

Respuesta

11

A mí me parece que se puede beneficiar de las Visual Studio 2005 Web Deployment Project s.

Con eso, puede indicarle que actualice/modifique secciones de su archivo web.config dependiendo de la configuración de compilación.

Echa un vistazo a this blog entry from Scott Gu para una visión general/muestra rápida.

+0

Este ofrece la menor fricción y tiempo de entrega, y pude ponerlo en funcionamiento rápidamente. Gracias por su ayuda! –

+0

No hay problema, contento para ayudar. –

1

He adoptado el Jean Paul Boodhoo Method para cambiar las configuraciones. La idea general es tener uno o más archivos TEMPLATE de configuración TOKENIZADOS en lugar de los archivos de configuración. Luego tiene una tarea de script de compilación que reemplaza los tokens con valores de un archivo de propiedades local SINGLE. Este archivo de propiedades contiene todas las diferencias en la configuración y es único por copia de trabajo.

Este sistema me ha funcionado muy bien y, una vez configurado inicialmente, es muy fácil administrar los cambios de entorno.

3

Soy un gran fan de la utilización de MSBuild, en particular, las tareas de MSBuild Comunidad (http://msbuildtasks.tigris.org/) y no es una tarea XSLT para transformar el web.config con la configuración de serie de conexión adecuados, etc.

guardo estas tareas útiles:

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

Obviamente, esto no es 100% lo que está buscando, que es lo que cada desarrollador puede tener su propio web.c onfig

Pero no hay ninguna razón por la que no pueda usar el principio anterior para tener múltiples configuraciones de compilación que apliquen el XSLT correcto.

Mi XSLT se ve así:

<?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

He estado buscando en MSBuild y/o NA nt es lo siguiente que debo aprender, pero aún no he empezado. ¡Sé que necesito hacerlo! –

+0

Mi respuesta tiene enlaces a una serie de publicaciones de blog que enseñan cómo automatizar una compilación con NAnt. Puede ser un lugar útil para comenzar. – Gilligan

+0

No tengo ninguna experiencia con NAnt, ¿qué ofrece en la parte superior de MSBuild? –

2

Siempre se puede usar de NAnt + NAnt.Contrib modificar el web.config durante la construcción. NAnt tiene tareas xmlpeek y xmlpoke que le permiten actualizar archivos xml.

p. Ej.

< xmlpoke file = "$ {dist.dir} /Web.config" xpath = "/ configuration/applicationSettings/MyProj.Web.Properties.Configuración/configuración [@name = 'MyProj_Web_Service']/value " value =" http: // $ {AppServer} /Service.asmx "/ >

Cuestiones relacionadas