Jak zmienić wartość atrybutu w sekcji appSettings za pomocą transformacji Web.config


260

Czy można przekształcić następujący plik Web.config appSettings:

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

w coś takiego:

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

Więc muszę usunąć klucz developmentModeUserId i muszę zastąpić wartość dla klucza developmentMode .

Odpowiedzi:


452

Chcesz coś takiego:

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

Zobacz też: Web.config Składnia transformacji do wdrażania projektu aplikacji sieci Web


24
Uwaga: w klawiszach rozróżniana jest wielkość liter!
— Cosmin

2
Doskonała odpowiedź. Próbowałem opcji innych firm, takich jak Slow Cheetah i nigdzie się nie udawało - to było proste i idealne.
— Steve,

2
@stevens: Potrzebujesz Slow Cheetah, jeśli chcesz przekształcić, powiedzmy, app.config dla aplikacji natywnych. Jeśli jednak pamiętam, składnia powinna być identyczna (minęło trochę czasu, odkąd musiałem używać Slow Cheetah).
— Ellesedil

alternatywą dla powolnego oszusta jest utworzenie myotherconfig.staging.config, aw transformacji web.Staging.config transformacja odwołania do myotherconfig.config w web.config
— nologo

3
Tylko drobne wyjaśnienie, które może pomóc niektórym osobom: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"część należy użyć w pliku Web.Whokolwiek.config, a nie w pliku Web.config.
— user3533716

11

Zastępowanie wszystkich ustawień aplikacji

Jest to przypadek nadmiaru, w którym po prostu chcesz zastąpić całą sekcję pliku web.config. W takim przypadku zastąpię wszystkie ustawienia aplikacji w pliku web.config wprowadzę nowe ustawienia w pliku web.release.config. To jest moja podstawowa aplikacja web.config Ustawienia:

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

Teraz w moim pliku web.release.config zamierzam utworzyć sekcję appSettings, ale dołączę atrybut xdt: Transform = „Replace”, ponieważ chcę po prostu zastąpić cały element. Nie musiałem używać xdt: Locator, ponieważ nie ma nic do zlokalizowania - chcę po prostu wyczyścić tablicę i wymienić wszystko.

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

Zauważ, że w pliku web.release.config moja sekcja appSettings ma trzy klucze zamiast dwóch, a klucze nie są takie same. Teraz spójrzmy na wygenerowany plik web.config, co dzieje się, gdy publikujemy:

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

Tak jak się spodziewaliśmy - ustawienia web.config zostały całkowicie zastąpione wartościami w web.release config. To było łatwe!


9

Jeśli chcesz przekształcić ustawienia aplikacji z pliku konfiguracji sieci do pliku web.Release.config, musisz wykonać następujące kroki. Niech plik ustawień aplikacji web.config to:

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

Teraz jest web.Release.config do transformacji.

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

Spowoduje to przekształcenie wartości K1 na nową wartość w trybie rzeczywistym.


1

Nie lubię, aby transformacje zawierały więcej informacji niż było to konieczne. Zamiast przekształcać klucze, po prostu określam stan i intencję . O wiele łatwiej jest dostrzec zamiar, gdy robi się tak, przynajmniej IMO. Ponadto staram się umieścić wszystkie xdtatrybuty na pierwszym miejscu, aby wskazać czytelnikowi, że są to transformacje, a nie nowe rzeczy, które są definiowane.

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

Na powyższym znacznie łatwiej jest zauważyć, że pierwszy usuwa element. Drugi to ustawianie atrybutów. Ustawi / zastąpi zdefiniowane tutaj atrybuty. W takim przypadku zostanie po prostu ustawione valuena false.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.