Cara mengubah nilai atribut di bagian appSettings dengan transformasi Web.config

260

Apakah mungkin untuk mengubah file appSettings Web.config berikut:

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

menjadi sesuatu seperti ini:

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

Jadi, saya perlu menghapus developmentModeUserId kunci , dan saya perlu mengganti nilai untuk developmentMode kunci .

capung
sumber

Jawaban:

452

Anda menginginkan sesuatu seperti:

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

Lihat Juga: Sintaks Transformasi Web.config untuk Penerapan Proyek Aplikasi Web

Joe
sumber
24
Perhatikan kuncinya peka huruf besar kecil!
Cosmin
2
Jawaban yang sangat bagus. Saya sedang mencoba opsi pihak ke-3 seperti Slow Cheetah dan tidak mendapatkan apa-apa - ini sederhana dan sempurna.
Steve
2
@stevens: Anda perlu Cheetah Lambat jika Anda ingin mengubah, katakanlah, file app.config untuk aplikasi asli. Sintaksnya, bagaimanapun, harus identik jika saya ingat (sudah lama saya harus menggunakan Slow Cheetah).
Ellesedil
alternatif untuk memperlambat curang adalah dengan membuat myotherconfig.staging.config dan di web.Staging.config mentransformasikan, mentransformasikan referensi ke myotherconfig.config di web.config
nologo
3
Hanya klarifikasi kecil yang mungkin membantu beberapa orang: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"bagian itu harus digunakan di Web. Apa pun.config dan bukan dalam file Web.config.
user3533716
11

Mengganti semua Pengaturan Aplikasi

Ini adalah kasus pembunuhan berlebihan di mana Anda hanya ingin mengganti seluruh bagian web.config. Dalam hal ini saya akan mengganti semua AppSettings di web.config akan pengaturan baru di web.release.config. Ini adalah pengaturan aplikasi web.config dasar saya:

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

Sekarang di file web.release.config saya, saya akan membuat bagian appSettings kecuali saya akan menyertakan atribut xdt: Transform = "Ganti" karena saya hanya ingin mengganti seluruh elemen. Saya tidak perlu menggunakan xdt: Locator karena tidak ada yang dapat ditemukan - Saya hanya ingin menghapus papan tulis dan mengganti semuanya.

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

Perhatikan bahwa di file web.release.config, bagian appSettings saya memiliki tiga kunci alih-alih dua, dan kunci tersebut bahkan tidak sama. Sekarang mari kita lihat file web.config yang dihasilkan apa yang terjadi ketika kita menerbitkan:

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

Seperti yang kami harapkan - pengaturan aplikasi web.config sepenuhnya digantikan oleh nilai-nilai dalam konfigurasi web.release. Itu mudah!

Joe
sumber
9

Jika Anda ingin mengubah pengaturan aplikasi Anda dari file konfigurasi web ke web.Release.config, Anda harus melakukan langkah-langkah berikut. Biarkan file pengaturan aplikasi web.config Anda adalah ini-

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

Sekarang di sini adalah web.Release.config untuk transformasi.

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

Ini akan mengubah nilai K1 ke nilai baru dalam Mode nyata.

Debendra Dash
sumber
1

Saya tidak suka transformasi memiliki lebih banyak info daripada yang dibutuhkan. Jadi alih-alih menyatakan kembali kunci, saya hanya menyatakan kondisi dan niat . Lebih mudah untuk melihat niat ketika dilakukan seperti ini, setidaknya IMO. Juga, saya mencoba dan meletakkan semua xdtatribut terlebih dahulu untuk ditunjukkan kepada pembaca, ini adalah transformasi dan bukan hal-hal baru yang didefinisikan.

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

Di atas, akan lebih mudah untuk melihat bahwa yang pertama adalah menghapus elemen. Yang ke-2 adalah mengatur atribut. Ini akan mengatur / mengganti atribut yang Anda tetapkan di sini. Dalam hal ini hanya akan diatur valueke false.

CodingYoshi
sumber