visual etiqueta crear concepto archivo app c# asp.net visual-studio transformation webdeploy

c# - crear - concepto de etiqueta en visual basic



¿Cómo agregar transformaciones de configuración para un archivo de configuración personalizado en Visual Studio? (4)

Existe otro enfoque que no requiere la instalación de extensiones ni el uso de eventos de compilación.

Supongamos que tiene sus configuraciones personalizadas así:

  • myConfig.config
  • myConfig.Uat.config
  • myConfig.Release.config

Entonces en tu Web.config principal tienes esto:

<mySection configSource="myConfig.config" />

Por último, dentro de su Web.Uat.config usted agrega una transformación como esta:

<mySection configSource="myConfig.Uat.config" xdt:Transform="SetAttributes" />

Esto no está transformando el archivo myConfig.config , sino que reemplaza el nombre del archivo de configuración personalizado que se debe usar. Puedes hacer lo mismo para el lanzamiento y cualquier otro entorno.

Su myConfig.Uat.config no debe contener transformaciones, debe ser una copia del archivo de configuración personalizado base, con los valores adecuados para el entorno personalizado.

El inconveniente es que cada vez que agregue algo al archivo de configuración personalizado base, también debe agregarlo a los archivos de configuración para otros envs (incluso si el valor debe ser el mismo a través de envs). Por lo tanto, consideraría usar estos archivos de configuración personalizados para la configuración que se debe cambiar entre envs.

El proyecto en el que estoy trabajando implica la lectura de muchos puntos finales de servicio (url) de un archivo de configuración. Como la lista sería bastante grande, decidí guardarlos en un archivo de configuración personalizado para mantener mi web.config limpio y pequeño. Incluí la sección personalizada a mi web de la siguiente manera:

<mySection configSource="myConfig.config" />

Funciono perfectamente bien.

Pero el problema de la transformación aparece durante la implementación del proyecto en diferentes entornos. Tengo tres archivos web.config:

Web.config

Web.Uat.config

Web.Release.config

Mientras que la transformación web.config funciona, las transformaciones para los archivos de configuración personalizados fallan en la implementación.

¿Hay alguna manera de transformar el archivo de configuración personalizado durante la implementación?


He estado usando SlowCheetah pero encontré algo que creo que es más elegante. Solo le digo a la compilación que genere el .config en función de la configuración de la compilación.

Al tener una aplicación. Liberar.configurar en su proyecto (o muchas más dependiendo de sus necesidades de implementación) solo necesita editar el archivo del proyecto (el archivo .csproj si programa en C #). Encuentre el final, entre el último </ItemGroup> y </Project> y agregue:

</ItemGroup> <Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" /> <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v$(VisualStudioVersion)/Web/Microsoft.Web.Publishing.Tasks.dll" /> <Target Name="AfterBuild"> <PropertyGroup> <OutputTypeName>$(OutputType)</OutputTypeName> <OutputTypeName Condition="''$(OutputTypeName)''==''Library''">dll</OutputTypeName> <OutputTypeName Condition="''$(OutputTypeName)''==''Module''">dll</OutputTypeName> <OutputTypeName Condition="''$(OutputTypeName)''==''Winexe''">exe</OutputTypeName> </PropertyGroup> <TransformXml Source="Config/app.config" Transform="Config/app.$(Configuration).config" Destination="$(OutputPath)/$(AssemblyName).$(OutputTypeName).config" /> </Target> </Project>

Guarda y vuelve a cargar desde VisualStudio. Compile en el modo Release y verifique la carpeta bin / Release en su archivo <MyProject>.config la transformación se realiza.

Este ejemplo se aplica a los archivos Exe y Dll y cualquier versión de VisualStudio porque incluye esta ayuda de publicación


Visual Studio transforma solo los archivos web.config por defecto.

Si necesita un archivo de configuración personalizado con transformación para entornos DEV, UAT, PROD, etc., intente

  1. Use extensiones personalizadas para Visual Studio como SlowCheetah - Transformaciones XML para la funcionalidad de vista previa de la transformación de configuración.
  2. Agregue para el proyecto de Nuget SlowCheetah para proporcionar la construcción en transformación.

Un poco de detalles:

Agregar VS Extension SlowCheetah desde extensiones y actualizaciones

Haga clic derecho en su myconfig.config y elija agregar transorma:

Dentro de cada configuración definida inserte sus propias reglas de transformación así:

<services xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <service name="WebApplication1.Services.Service2" xdt:Transform="Replace" xdt:Locator="Match(name)" > <endpoint address="http://localhost:57939/Services/DebugService" behaviorConfiguration="WebApplication1.Services.Service2AspNetAjaxBehavior" binding="webHttpBinding" contract="WebApplication1.Services.Service2" /> </service> </services>

Espero que haya sido útil


Voy a extender un poco la respuesta de Andoni Ripoll Jarauta.

Nos enfrentamos a un problema similar. Quería sacar las cadenas de conexión del archivo web.config para limitar los conflictos de combinación. También quería crear una configuración de "versión" que contenga información estática al publicar.

...Suficientemente simple. Cree un archivo de configuración personalizado, webdb.config, y actualice el archivo web.config.

Ex. web.config

<connectionStrings configSource="WebDB.config"/>

wedbdb.config (se requiere la versión xml = "1.0" para la transformación)

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

A continuación agregue los archivos de transformación para webdb.config

Ejemplo de WebDB.Debug.config:

<?xml version="1.0" encoding="utf-8"?> <connectionStrings xdt:Transform="Replace" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <add name="PRRADDataContainer" connectionString="metadata=~/PRRADData.csdl|~/PRRADData.ssdl|~/PRRADData.msl;provider=System.Data.SqlClient;provider connection string='';Data Source=localhost;Initial Catalog=;User ID=;Password=;multipleactiveresultsets=True;App=EntityFramework'';" providerName="System.Data.EntityClient" /> <add name="MyConnectionString" connectionString="Data Source=localhost;Initial Catalog=;Persist Security Info=True;User ID=;Password=;" providerName="System.Data.SqlClient" /> </connectionStrings>

Ejemplo de WebDB.Release.config:

<?xml version="1.0" encoding="utf-8"?> <connectionStrings xdt:Transform="Replace" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <add name="PRRADDataContainer" connectionString="metadata=~/PRRADData.csdl|~/PRRADData.ssdl|~/PRRADData.msl;provider=System.Data.SqlClient;provider connection string='';Data Source=prod_server;Initial Catalog=;User ID=;Password=;multipleactiveresultsets=True;App=EntityFramework'';" providerName="System.Data.EntityClient" /> <add name="MyConnectionString" connectionString="Data Source=prod_server;Initial Catalog=;Persist Security Info=True;User ID=;Password=;" providerName="System.Data.SqlClient" /> </connectionStrings>

A continuación necesitamos agregar un evento posterior a la construcción. Esto se crea simplemente editando el archivo CSPROJ.

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v$(VisualStudioVersion)/Web/Microsoft.Web.Publishing.Tasks.dll" /> <Target Name="AfterBuild"> <TransformXml Source="WebDB.config" Transform="WebDB.$(Configuration).config" Destination="WebDB.config" /> </Target>

Ahora, cuando lo ejecute localmente, obtendré WebDB.Debug.config y cuando publique mi código, solo necesito asegurarme de seleccionar "Liberar" como fuente de configuración. En ambos casos, el archivo WebDB.config se actualizará con el archivo correspondiente cuando construya.

NOTA: asegúrese de configurar webdb.config, webdb.debug.config y webdb.release.config en "No copiar" para la opción "Copiar en el directorio de salida".

¡Espero que esto ayude!