2010-07-15 10 views
19

Estamos utilizando msdeploy (o implementación web si lo desea) para empaquetar e implementar aplicaciones web. Al declarar el tiempo del paquete de parámetros, podemos proporcionar valores en el momento del despliegue (para reemplazar cadenas de conexión, entre otras cosas).Reemplazar elementos * de configuración web * con parámetros msdeploy

El problema que enfrentamos actualmente es reemplazar los valores en las secciones applicationSettings en nuestra configuración web. No podemos obtener msdeploy para reemplazar el valor porque el contenido que queremos reemplazar es el texto dentro de un elemento xml, no un valor de atributo (la advertencia que obtenemos es: "No se puede establecer un valor en el tipo de nodo 'Elemento'").

La configuración relevante es así:

<applicationSettings> 
    <Name.Of.Assembly.Properties.Settings> 
    <setting name="someSetting" serializeAs="String"> 
     <value>I wanna be replaced</value> 
    </setting> 
    </Name.Of.Assembly.Properties.Settings> 
</applicationSettings> 

y el xml parámetro declarar se parece a esto:

<parameter name="XX" defaultValue="default"> 
    <parameterEntry kind="XmlFile" 
         scope="Web\.config$" 
         match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value" /> 
</parameter> 

¿Se MSDeploy sólo soportan la sustitución de valores de atributos o estoy haciendo algo mal?

Respuesta

40

Para la posteridad ...

sólo tiene que añadir "/ texto()" al final del partido. Eso cambiará el valor de encerrado por las etiquetas. Sin embargo, este valor no puede estar vacío en la fuente web.config. Por lo tanto, cuando crea el paquete de implementación mediante la configuración de la solución "Versión", web.Release.config no debe establecer este valor de la configuración en un valor vacío.

<parameter name="XX" defaultValue="default"> 
    <parameterEntry kind="XmlFile" 
         scope="Web\.config$" 
         match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value/text()" /> 
</parameter> 
+0

Útil, gracias! Lo probaré. –

+2

Funcionó para mí --- el/texto() es lo que me faltaba. No es un xpath pro. Esto debe marcarse como la respuesta. Gracias Dave. – TravisWhidden

+1

De acuerdo con @TravisWhidden: esto debe marcarse como la respuesta correcta. – Philippe

Cuestiones relacionadas