Як змінити значення атрибута в розділі appSettings з перетворенням Web.config


260

Чи можливо перетворити такий файл Web.config appSettings:

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

у щось подібне:

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

Отже, мені потрібно видалити ключ developmentModeUserId , і мені потрібно замінити значення для ключа developmentMode .

Відповіді:


452

Ви хочете чогось типу:

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

Див. Також: Синтаксис трансформації Web.config для розгортання проекту веб-додатків


24
Зверніть увагу, що клавіші відрізняються від регістру!
Космін

2
Відмінна відповідь. Я пробував сторонні варіанти, як повільний гепард і нікуди не потрапляв - це було просто і ідеально.
Стів

2
@stevens: вам потрібен повільний гепард, якщо ви хочете перетворити, скажімо, файли app.config для власних програм. Синтаксис, однак, повинен бути ідентичним, якщо я пригадую (минуло час, коли мені довелося користуватися Повільним гепардом).
Ellesedil

альтернативою повільному шахрайству є створення myotherconfig.staging.config та перетворення web.Staging.config, перетворення посилання на myotherconfig.config в web.config
nologo

3
Лише незначне уточнення, яке може допомогти деяким людям: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"частина повинна використовуватися у Web.Wever.config, а не у файлі Web.config.
користувач3533716

11

Заміна всіх налаштувань додатків

Це випадок зайвого вбивства, коли ви просто хочете замінити цілий розділ web.config. У цьому випадку я заміню всі AppSettings в web.config, нові налаштування в web.release.config. Це моя базова програма web.configНалаштування:

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

Тепер у своєму файлі web.release.config я збираюся створити розділ appSettings, за винятком того, що я включатиму атрибут xdt: Transform = ”Замінити”, оскільки я хочу просто замінити весь елемент. Мені не довелося користуватися xdt: Locator, тому що тут нічого знайти - я просто хочу витерти шифер чистим і замінити все.

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

Зауважте, що у файлі web.release.config мій розділ appSettings має три клавіші замість двох, а ключі навіть не однакові. Тепер давайте подивимось на створений файл web.config, що відбувається під час публікації:

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

Як ми і очікували - налаштування web.config були повністю замінені значеннями в конфігурації web.release. Це було просто!


9

Якщо ви хочете перетворити налаштування програми з веб-конфігураційного файлу в web.Release.config, вам потрібно виконати наступні дії. Нехай ваш файл налаштування програми web.config такий:

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

Тепер ось веб.Release.config для перетворення.

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

Це перетворить значення K1 на нове значення в режимі relese.


1

Я не люблю перетворень, щоб мати більше інформації, ніж потрібно. Тож замість перезавантаження ключів я просто констатую умову та намір . Набагато простіше бачити намір, коли це робиться, принаймні ІМО. Також я намагаюся xdtспочатку поставити всі атрибути, щоб вказати читачеві, це перетворення, а не нові речі, які визначаються.

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

У вищесказаному набагато простіше бачити, що перший - це видалення елемента. 2-й - це встановлення атрибутів. Він встановить / замінить будь-які визначені тут атрибути. У цьому випадку він буде просто встановити valueв false.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.