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
Removetarea 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 laInsertIfMissingtarea. Pero habrías estado en lo correcto si él hubiera usado en suRemoveAlllugar.Utilice la
InsertIfMissingtransformación para asegurarse de que existe la configuración de la aplicación.Luego use la
Replacetransformación para establecer su valor.También podría usar la
SetAttributestransformación en lugar deReplace. La diferencia es queSetAttributesno 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