2010-07-15 9 views
19

Usiamo msdeploy (o la distribuzione Web, se lo desideri) per impacchettare e distribuire app web. Dichiarando i tempi del pacchetto dei parametri possiamo fornire valori al momento della distribuzione (per sostituire le stringhe di connessione tra le altre cose).Sostituisci elementi * config * con parametri msdeploy

Il problema che stiamo affrontando è la sostituzione dei valori nelle sezioni applicationSettings nella nostra configurazione web. Non possiamo ottenere msdeploy per sostituire il valore perché il contenuto che vogliamo sostituire è il testo all'interno di un elemento xml, non un valore di attributo (l'avviso che otteniamo è: "Impossibile impostare un valore sul tipo di nodo 'Elemento'").

La configurazione relativa assomiglia a questo:

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

e il parametro dichiarazione XML assomiglia a questo:

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

Vuol msdeploy supportano solo sostituendo i valori degli attributi o sto facendo qualcosa di sbagliato?

risposta

40

Ai posteri ...

Hai solo bisogno di aggiungere "/ text()" alla fine della partita. Ciò cambierà il valore di racchiuso dai tag. Tuttavia, questo valore non può essere vuoto nella fonte web.config. Pertanto, quando si crea il pacchetto di distribuzione utilizzando la configurazione della soluzione "Release", web.Release.config non deve impostare questo valore dell'impostazione su un valore vuoto.

<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

Utile, grazie! Proverò. –

+2

Ha funzionato per me --- il/text() è ciò che mi mancava. Non è un pro xpath. Questo dovrebbe essere contrassegnato come la risposta. Grazie Dave. – TravisWhidden

+1

Accetto con @TravisWhidden: questa deve essere contrassegnata come risposta corretta. – Philippe