Come modificare il valore dell'attributo nella sezione appSettings con la trasformazione Web.config


260

È possibile trasformare il seguente file appSettings Web.config:

<appSettings>
    <add key="developmentModeUserId" value="00297022" />
    <add key="developmentMode" value="true" />
    /* other settings here that should stay */
</appSettings>

in qualcosa del genere:

<appSettings>
    <add key="developmentMode" value="false" />
    /* other settings here that should stay */
</appSettings>

Quindi, devo rimuovere la chiave developmentModeUserId e devo sostituire il valore per la chiave developmentMode .

Risposte:


452

Vuoi qualcosa come:

<appSettings>
  <add key="developmentModeUserId" xdt:Transform="Remove" xdt:Locator="Match(key)"/>
  <add key="developmentMode" value="false" xdt:Transform="SetAttributes"
          xdt:Locator="Match(key)"/>
</appSettings>

Vedere anche: Sintassi di trasformazione Web.config per la distribuzione di progetti di applicazioni Web


24
Nota che i tasti fanno distinzione tra maiuscole e minuscole!
Cosmin

2
Risposta eccellente. Stavo provando opzioni di terze parti come Slow Cheetah e non arrivavo da nessuna parte - questo era semplice e perfetto.
Steve,

2
@stevens: Avresti bisogno di Slow Cheetah se vuoi trasformare, per esempio, file app.config per applicazioni native. La sintassi, tuttavia, dovrebbe essere identica se ricordo (è da un po 'che non uso il ghepardo lento).
Ellesedil,

un'alternativa a cheat lento è creare myotherconfig.staging.config e nella trasformazione web.Staging.config, trasformare il riferimento a myotherconfig.config in web.config
nologo

3
Solo un piccolo chiarimento che potrebbe aiutare alcune persone: la xdt:Transform="SetAttributes" xdt:Locator="Match(key)"parte dovrebbe essere usata nel Web.Whatever.config e non nel file Web.config.
user3533716

11

Sostituzione di tutte le impostazioni delle app

Questo è il caso eccessivo in cui si desidera semplicemente sostituire un'intera sezione di web.config. In questo caso sostituirò tutte le AppSettings in web.config con nuove impostazioni in web.release.config. Questa è la mia impostazione di base web.config app:

<appSettings>
  <add key="KeyA" value="ValA"/>
  <add key="KeyB" value="ValB"/>
</appSettings>

Ora nel mio file web.release.config, ho intenzione di creare una sezione appSettings tranne che includerò l'attributo xdt: Transform = "Sostituisci" poiché voglio solo sostituire l'intero elemento. Non ho dovuto usare xdt: Locator perché non c'è nulla da individuare - voglio solo pulire la lavagna e sostituire tutto.

<appSettings xdt:Transform="Replace">
  <add key="ProdKeyA" value="ProdValA"/>
  <add key="ProdKeyB" value="ProdValB"/>
  <add key="ProdKeyC" value="ProdValC"/>
</appSettings>

Nota che nel file web.release.config la mia sezione AppSettings ha tre chiavi invece di due e le chiavi non sono uguali. Ora diamo un'occhiata al file web.config generato cosa succede quando pubblichiamo:

<appSettings>
   <add key="ProdKeyA" value="ProdValA"/>
   <add key="ProdKeyB" value="ProdValB"/>
   <add key="ProdKeyC" value="ProdValC"/>
 </appSettings>

Proprio come ci aspettavamo: le app web.config sono state completamente sostituite dai valori in web.release config. È stato facile!


9

Se vuoi trasformare le impostazioni della tua app dal file di configurazione web a web.Release.config, devi procedere come segue. Lascia che il file delle impostazioni dell'app web.config sia questo-

<appSettings>
     <add key ="K1" value="Debendra Dash"/>
  </appSettings>

Ora ecco il web.Release.config per la trasformazione.

<appSettings>
    <add key="K1" value="value dynamicly from Realease"
       xdt:Transform="SetAttributes"
          xdt:Locator="Match(key)"   
         />
  </appSettings>

Ciò trasformerà il valore di K1 nel nuovo valore in modalità realese.


1

Non mi piace che le trasformazioni abbiano più informazioni del necessario. Quindi, invece di riaffermare le chiavi, dichiaro semplicemente la condizione e l' intenzione . È molto più facile vedere l'intenzione quando fatto in questo modo, almeno IMO. Inoltre, provo a mettere prima tutti gli xdtattributi da indicare al lettore, queste sono trasformazioni e non si definiscono cose nuove.

<appSettings>
  <add xdt:Locator="Condition(@key='developmentModeUserId')" xdt:Transform="Remove" />
  <add xdt:Locator="Condition(@key='developmentMode')" xdt:Transform="SetAttributes"
       value="false"/>
</appSettings>

In quanto sopra è molto più facile vedere che il primo sta rimuovendo l'elemento. Il secondo sta impostando gli attributi. Imposta / sostituisce tutti gli attributi definiti qui. In questo caso sarà semplicemente impostato valuesu false.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.