xdt visual transformaciones studio debug change c# asp.net web-config

c# - visual - Web.Config Debug/Release



web config visual studio (4)

Sé que web.config en Visual Studio 2010 ofrece la capacidad de cambiar de las bases de datos del modo de depuración al modo de lanzamiento.

Aquí está mi Web.Release.config:

<?xml version="1.0"?> <!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 --> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <connectionStrings> <add name="ApplicationServices" connectionString="data source=./SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> </system.web> </configuration>

Aquí está mi código Web.Debug.config:

<?xml version="1.0"?> <!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 --> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <connectionStrings> <add name="ApplicationServices" connectionString="data source=./SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> <add name="Live1" connectionString="Data Source=Live;Initial Catalog=LiveDatabase;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> </system.web> </configuration>

Y este es mi código Web.config:

<?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> </authentication> <membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <profile> <providers> <clear/> <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> </providers> </profile> <roleManager enabled="false"> <providers> <clear/> <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> </providers> </roleManager> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>

Cuando publico mi proyecto, no hay nada que se muestre en mi archivo Web.config.it ¿No se muestra la cadena de conexión de Live Database?


Es posible usar el objetivo de compilación ConfigTransform disponible como paquete Nuget - https://www.nuget.org/packages/CodeAssassin.ConfigTransform/

Todos los archivos de transformación "web. * .config" se transformarán y generarán como una serie de archivos "web. *. Config.transformed" en el directorio de salida de compilación, independientemente de la configuración de compilación elegida.

Lo mismo se aplica a los archivos de transformación "app. *. Config" en proyectos que no son web.

y luego agregar el siguiente objetivo a su *.csproj .

<Target Name="TransformActiveConfiguration" Condition="Exists(''$(ProjectDir)/Web.$(Configuration).config'')" BeforeTargets="Compile" > <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" /> </Target>

Publicar una respuesta ya que esta es la primera publicación de que aparece en Google sobre el tema.


Las transformaciones web.config que forman parte de Visual Studio 2010 usan XSLT para "transformar" el archivo web.config actual en su versión .Debug o .Release.

En sus archivos .Debug / .Release, debe agregar el siguiente parámetro en sus campos de cadena de conexión:

xdt:Transform="SetAttributes" xdt:Locator="Match(name)"

Esto hará que cada línea de cadena de conexión encuentre el nombre coincidente y actualice los atributos en consecuencia.

Nota: No tendrá que preocuparse por actualizar su parámetro providerName en los archivos de transformación, ya que no cambian.

Aquí hay un ejemplo de una de mis aplicaciones. Aquí está la sección del archivo web.config:

<connectionStrings> <add name="EAF" connectionString="Data Source=NTSQLT/S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=XXXX" providerName="System.Data.SqlClient" /> </connectionString>

Y aquí está la sección web.config.release haciendo la transformación adecuada:

<connectionStrings> <add name="EAF" connectionString="Data Source=NTSQLP/S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=YYYY" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> </connectionStrings>

Una nota adicional: las transformaciones solo ocurren cuando publicas el sitio, no cuando simplemente lo ejecutas con F5 o CTRL + F5. Si necesita ejecutar una actualización localmente contra una configuración dada, deberá cambiar manualmente su archivo Web.config para esto.

Para obtener más detalles, puede ver la documentación de MSDN

https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx


Para hacer que la transformación funcione en desarrollo (usando F5 o CTRL + F5) dejo ctt.exe ( https://ctt.codeplex.com/ ) en la carpeta de paquetes (packages / ConfigTransform / ctt.exe).

Luego registro un evento previo o posterior a la construcción en Visual Studio ...

$(SolutionDir)packages/ConfigTransform/ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config" $(SolutionDir)packages/ConfigTransform/ctt.exe source:"$(ProjectDir)web.config" transform:"$(ProjectDir)web.$(ConfigurationName).config" destination:"$(ProjectDir)web.config"

Para las transformaciones utilizo la extensión SlowCheeta VS ( https://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 ).


Si vas a reemplazar todas las cadenas de conexión por noticias para el entorno de producción, puedes simplemente reemplazar todas las cadenas de conexión por las de producción con esta sintaxis:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <connectionStrings xdt:Transform="Replace"> <!-- production environment config ---> <add name="ApplicationServices" connectionString="data source=./SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> ....

La información para esta respuesta proviene de esta respuesta y esta publicación en el blog .

aviso : como otros ya lo explicaron, esta configuración se aplicará solo cuando la aplicación no publique cuando la esté ejecutando / depurándola (presionando F5).