Web.config dönüşümü ile appSettings bölümündeki özniteliğin değeri nasıl değiştirilir


260

Aşağıdaki Web.config appSettings dosyasını dönüştürmek mümkün mü:

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

böyle bir şeye:

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

Yani, anahtar kaldırmak gerekir developmentModeUserId ve ben anahtar değerini değiştirmeniz gerekiyor developmentMode .

Yanıtlar:


452

Gibi bir şey istiyorsun:

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

Ayrıca Bkz: Web Uygulaması Proje Dağıtımı için Web.config Dönüştürme Sözdizimi


24
Tuşların büyük / küçük harfe duyarlı olduğunu unutmayın!
Cosmin

2
Mükemmel cevap. Yavaş Çita gibi 3. parti seçeneklerini deniyordum ve hiçbir yere gitmiyordum - bu basit ve mükemmeldi.
Steve

2
@stevens: Yerel uygulamalar için app.config dosyalarını dönüştürmek istiyorsanız Slow Cheetah'a ihtiyacınız var. Bununla birlikte, sözdizimi hatırlarsam aynı olmalıdır (Yavaş Çita'yı kullanmak zorunda olduğumdan beri bir süre geçti).
Ellesedil

Yavaş dolandırıcı bir alternatif myotherconfig.staging.config oluşturmak ve web.Staging.config dönüşümü de, web.config'de myotherconfig.config referans dönüşümü
nologo

3
Bazı insanlara yardımcı olabilecek küçük bir açıklama: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"Parçanın Web.config dosyasında değil Web.Whatever.config dosyasında kullanılması gerekir.
user3533716

11

Tüm AppSettings öğelerini değiştirme

Bu, web.config dosyasının bir bölümünün tamamını değiştirmek istediğiniz aşırı doldurma durumudur. Bu durumda web.config dosyasındaki tüm AppSettings öğelerini değiştireceğim web.release.config dosyasındaki yeni ayarları değiştireceğim. Bu benim temel web.config appSettings:

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

Şimdi web.release.config dosyamda, xdt: Transform = ”Replace” niteliğini ekleyeceğim dışında sadece tüm öğeyi değiştirmek istediğim için bir appSettings bölümü oluşturacağım. Ben xdt: Locator kullanmak zorunda değildi çünkü bulmak için bir şey yok - Ben sadece kayrak temiz silmek ve her şeyi değiştirmek istiyorum.

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

Web.release.config dosyasında appSettings bölümümde iki yerine üç anahtar bulunduğunu ve anahtarların aynı olmadığını unutmayın. Şimdi oluşturulan web.config dosyasına bakalım, yayınladığımızda neler olacak:

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

Tıpkı beklediğimiz gibi, web.config appSettings'in yerine tamamen web.release config içindeki değerler geldi. Kolaydı!


9

Uygulama ayarlarınızı web config dosyasından web.Release.config dosyasına dönüştürmek istiyorsanız, aşağıdaki adımları uygulamanız gerekir. Web.config uygulama ayar dosyanız bu olsun -

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

Şimdi dönüşüm için web.Release.config dosyası.

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

Bu, gerçek modda K1 değerini yeni değere dönüştürecektir.


1

Dönüşümlerin gerekenden daha fazla bilgiye sahip olmasını sevmiyorum. Yerine anahtarlarını yeniden ifade Yani, ben sadece devlet koşul ve niyeti . Böyle yapıldığında niyeti görmek çok daha kolay, en azından IMO. Ayrıca, tüm xdtözellikleri okuyucuya göstermek için önce koymaya çalışıyorum , bunlar dönüşümler ve yeni şeyler tanımlanmıyor.

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

Yukarıda, ilkinin öğeyi kaldırdığını görmek çok daha kolaydır. İkincisi nitelikleri ayarlamaktır. Burada tanımladığınız nitelikleri ayarlar / değiştirir. Bu durumda sadece koyacaktır valueiçin false.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.