Estoy usando la transformación web.config como se describe en la publicación a continuación para generar configuraciones para diferentes entornos.
http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html
Puedo hacer una transformación "Reemplazar" haciendo coincidir la tecla, p. Ej.
<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
Y puedo hacer "Inserts", por ejemplo
<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />
Pero lo que realmente me parece útil es una transformación ReplaceOrInsert, ya que no siempre puedo confiar en que el archivo de configuración original tenga / no tenga una determinada clave.
¿Hay alguna forma de hacer esto?
asp.net
web-config-transform
xslt
xdt-transform
Chris Haines
fuente
fuente
Respuestas:
Encontré una solución barata. No es bonito y no funcionará muy bien si tiene muchos elementos que deben ser "Reemplazar o insertar".
Haga un "Eliminar" y luego un "Insertar después | Insertar antes".
Por ejemplo,
fuente
En combinación con el
xdt:Transform="Remove"
usoxdt:Transform="InsertIfMissing"
en VS2012.fuente
Remove
tarea solo elimina la primera aparición. Algunos elementos pueden tener múltiples ocurrencias. No puedo imaginar que quieras esto, pero luego eliminaría la primera aparición y omitiría laInsertIfMissing
tarea. Pero habrías estado en lo correcto si él hubiera usado en suRemoveAll
lugar.Utilice la
InsertIfMissing
transformación para asegurarse de que existe la configuración de la aplicación.Luego use la
Replace
transformación para establecer su valor.También podría usar la
SetAttributes
transformación en lugar deReplace
. La diferencia es queSetAttributes
no toca los nodos secundarios.Estas técnicas son mucho mejores que eliminar + insertar porque los nodos existentes no se mueven a la parte inferior de su nodo principal. Se agregan nuevos nodos al final. Los nodos existentes permanecen donde están en el archivo fuente.
Esta respuesta se aplica solo a las versiones más recientes de Visual Studio (2012 o más nuevas).
fuente
Un método mejor para mí fue insertar el elemento solo si no existe, ya que solo estoy configurando ciertos atributos. Eliminar el elemento descartaría cualquier otro atributo del elemento principal si existiera.
ejemplo: web.config (sin elemento)
web.config (con elemento)
Usando el localizador con una expresión XPath, agrego el nodo si no existe y luego establezco mi atributo:
ambos archivos web.config resultantes tienen includeExceptionDetailInFaults = "true" y el segundo conserva el atributo httpsHelpPageEnabled donde el método remove / insert no lo haría.
fuente