Para la aplicación basada en Web de Visual Studio 2010, tenemos características de Transformación de configuración mediante las cuales podemos mantener múltiples archivos de configuración para diferentes entornos. Pero la misma característica no está disponible para los archivos App.Config para Windows Services / WinForms o Console Application.
Hay una solución disponible como se sugiere aquí: aplicar magia XDT a App.Config .
Sin embargo, no es sencillo y requiere una serie de pasos. ¿Hay una manera más fácil de lograr lo mismo para los archivos app.config?
Respuestas:
Esto funciona ahora con el complemento de Visual Studio tratado en este artículo: SlowCheetah - Web.config Transformation Syntax ahora generalizada para cualquier archivo de configuración XML .
fuente
Probé varias soluciones y aquí está la más simple que encontré personalmente.
Dan señaló en los comentarios que la publicación original pertenece a Oleg Sych . ¡ Gracias, Oleg!
Aquí están las instrucciones:
1. Agregue un archivo XML para cada configuración al proyecto.
Por lo general, tendrá
Debug
yRelease
configuraciones para nombrar sus archivosApp.Debug.config
yApp.Release.config
. En mi proyecto, creé una configuración para cada tipo de entorno, por lo que es posible que desee experimentar con eso.2. Descargue el proyecto y abra el archivo .csproj para editarlo
Visual Studio le permite editar archivos .csproj directamente en el editor; solo necesita descargar el proyecto primero. Luego haga clic derecho sobre él y seleccione Editar <ProjectName> .csproj .
3. Enlace los archivos de la aplicación. * .Config a la aplicación principal.config
Encuentre la sección del archivo del proyecto que contiene todos
App.config
yApp.*.config
referencias. Notarás que sus acciones de construcción están configuradas paraNone
:Primero, establezca la acción de construcción para todos ellos
Content
.A continuación, haga todo los archivos específicos de la configuración dependan del principal
App.config
para que Visual Studio los agrupe como lo hace con los archivos de diseñador y de código subyacente.Reemplace XML arriba con el siguiente:
4. Activa transformaciones mágicas (solo es necesario para las versiones de Visual Studio anteriores a VS2017 )
Al final del archivo después
y antes de la final
inserte el siguiente XML:
¡Ahora puedes recargar el proyecto, construirlo y disfrutar de las
App.config
transformaciones!FYI
Asegúrese de que sus
App.*.config
archivos tengan la configuración correcta como esta:fuente
v10.0
conv$(VisualStudioVersion)
para asegurarse de que su proyecto funciona con todas las versiones posteriores de VS.Otra solución que he encontrado es NO usar las transformaciones, sino solo tener un archivo de configuración separado, por ejemplo, app.Release.config. Luego agregue esta línea a su archivo csproj.
Esto no solo generará el archivo myprogram.exe.config correcto, sino que si está utilizando el Proyecto de instalación y distribución en Visual Studio para generar MSI, obligará al proyecto de implementación a usar el archivo de configuración correcto al empaquetar.
fuente
<AppConfig>App.Release.config</AppConfig>
línea dentro de la<PropertyGroup
condición existente para laRelease
configuración y el IDE mostró una línea ondulada debajo de la<AppConfig>
... línea que decía que no estaba en el esquema o algo así, pero de todos modos guardé el archivo y volví a cargar el archivo del proyecto e hice una compilación enRelease
config y funcionó!En mi experiencia, las cosas que necesito hacer específicas para el entorno son cosas como cadenas de conexión, configuraciones de aplicaciones y, a menudo, configuraciones smpt. El sistema de configuración permite especificar estas cosas en archivos separados. Entonces puede usar esto en su app.config / web.config:
Lo que normalmente hago es colocar estas secciones específicas de la configuración en archivos separados, en una subcarpeta llamada ConfigFiles (ya sea en la raíz de la solución o en el nivel del proyecto, depende). Defino un archivo por configuración, por ejemplo smtp.config.Debug y smtp.config.Release.
Luego puede definir un evento de precompilación de esta manera:
En el desarrollo de equipos, puede modificar esto aún más incluyendo% COMPUTERNAME% y / o% USERNAME% en la convención.
Por supuesto, esto implica que los archivos de destino (x.config) NO deben colocarse en el control de origen (ya que se generan). Sin embargo, aún debe agregarlos al archivo del proyecto y establecer su propiedad de tipo de salida para 'copiar siempre' o 'copiar si es más reciente'.
Simple, extensible, y funciona para todo tipo de proyectos de Visual Studio (consola, winforms, wpf, web).
fuente
<?xml version="1.0"?> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/> <network host="localhost"/> </smtp>
La transformación:<?xml version="1.0"?> <smtp xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" from="[email protected]" deliveryMethod="Network"> <network .../> </smtp>
Inspirado por Oleg y otros en esta pregunta, tomé la solución https://stackoverflow.com/a/5109530/2286801 un paso más para habilitar lo siguiente.
Esta solución funciona realizando la transformación app.config antes de que se haga referencia a app.config por primera vez en el proceso de MSBuild. Utiliza un archivo de objetivos externos para facilitar la gestión en múltiples proyectos.
Instrucciones:
Pasos similares a la otra solución. He citado lo que sigue siendo igual y lo he incluido para completar y comparar más fácilmente.
0. Agregue un nuevo archivo a su proyecto llamado AppConfigTransformation.targets
3. Enlace los archivos de la aplicación. * .Config a la aplicación principal.config
Busque la sección del archivo del proyecto que contiene todas las referencias de App.config y App. *. Config y reemplace de la siguiente manera. Notarás que usamos None en lugar de Content.
inserte el siguiente XML:
¡Hecho!
fuente
Puede usar un archivo de configuración separado por configuración, por ejemplo, app.Debug.config, app.Release.config y luego usar la variable de configuración en su archivo de proyecto:
Esto creará el archivo ProjectName.exe.config correcto según la configuración que esté creando.
fuente
Escribí una buena extensión para automatizar la transformación de app.config como la integrada en Transformación de configuración de proyecto de aplicación web
La mayor ventaja de esta extensión es que no necesita instalarla en todas las máquinas de compilación
fuente
Instale la "Herramienta de transformación de configuración" en Visual Studio desde Marketplace y reinicie VS. También podrá ver la transformación de vista previa del menú para app.config.
https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
fuente
Así que terminé adoptando un enfoque ligeramente diferente. Seguí los pasos de Dan hasta el paso 3, pero agregué otro archivo: App.Base.Config. Este archivo contiene los ajustes de configuración que desea en cada App.Config generado. Luego uso BeforeBuild (con la adición de Yuri a TransformXml) para transformar la configuración actual con la configuración Base en App.config. El proceso de compilación luego usa el App.config transformado de manera normal. Sin embargo, una molestia es que desea excluir el siempre cambiante App.config del control de origen después, pero los otros archivos de configuración ahora dependen de él.
fuente
Solo una pequeña mejora a la solución que parece estar publicada en todas partes ahora:
fuente
$(VisualStudioVersion)
esté configurado cuando se usa MSBuild directamente.He creado otra alternativa a la publicada por Vishal Joshi donde el requisito de cambiar la acción de compilación a Contenido se elimina y también implementé el soporte básico para la implementación de ClickOnce. Digo básico, porque no lo probé a fondo, pero debería funcionar en el escenario típico de implementación de ClickOnce.
La solución consiste en un único proyecto de MSBuild que una vez importado a un proyecto de aplicación de Windows existente (* .csproj) extiende el proceso de compilación para contemplar la transformación app.config.
Puede leer una explicación más detallada en Visual Studio App.config XML Transformation y el archivo del proyecto MSBuild se puede descargar desde GitHub .
fuente
Si utiliza un TFS en línea (versión en la nube) y desea transformar la App.Config en un proyecto, puede hacer lo siguiente sin instalar ninguna herramienta adicional. Desde VS => Descargue el proyecto => Editar archivo de proyecto => Vaya al final del archivo y agregue lo siguiente:
AssemblyFile and Destination funciona para uso local y servidor TFS en línea (Cloud).
fuente
La solución propuesta no funcionará cuando se haga referencia a una biblioteca de clases con un archivo de configuración de otro proyecto (en mi caso, fue la biblioteca de proyectos de Azure Worker). No copiará el archivo transformado correcto de
obj
carpeta a otrabin\##configuration-name##
. Para que funcione con cambios mínimos, debe cambiar elAfterCompile
objetivo aBeforeCompile
:fuente