connectionstrings - ¿La mejor forma de cambiar la configuración entre entornos de Desarrollo/UAT/Prod en ASP.NET?
configurationmanager connectionstrings asp net core (5)
Para mí, parece que puede beneficiarse de los proyectos de implementación web de Visual Studio 2005 .
Con eso, puedes decirle que actualice / modifique secciones de tu archivo web.config dependiendo de la configuración de compilación.
Echa un vistazo a esta entrada de blog de Scott Gu para una descripción / muestra rápida.
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?
Soy un gran admirador de usar MSBuild, en particular las tareas de comunidad de MSBuild ( http://msbuildtasks.tigris.org/ ) y hay una tarea XSLT para transformar el archivo web.config con la configuración adecuada de la cadena de conexión, etc.
Mantengo estas tareas a mano:
<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 el 100% de lo que buscas, es así que cada desarrollador puede tener su propia web.config.
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>
Adopté el método Jean Paul Boodhoo 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 del entorno.
Siempre puede usar NAnt + NAnt.Contrib para modificar el web.config durante la compilació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.Settings / setting [@name = ''MyProj_Web_Service''] / value" value = "http: / /${AppServer}/Service.asmx "/>
Scott Hanselman ha sugerido una forma de hacer esto:
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx