วิธีการเปลี่ยนค่าของคุณสมบัติในส่วน appSettings ด้วยการแปลง Web.config


260

เป็นไปได้หรือไม่ที่จะแปลงไฟล์ app.setig Web.config ต่อไปนี้:

<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
โปรดทราบว่าปุ่มเป็นกรณี ๆ ไป!
Cosmin

2
คำตอบที่ยอดเยี่ยม ฉันกำลังลองตัวเลือกของบุคคลที่สามเช่นเสือชีต้าช้าและไม่มีที่ไหนเลย - นี่ง่ายและสมบูรณ์แบบ
สตีฟ

2
@ สตีเฟน: คุณต้องการเสือชีต้าช้าถ้าคุณต้องการแปลงพูดไฟล์ app.config สำหรับแอปพลิเคชั่นในเครื่อง อย่างไรก็ตามไวยากรณ์ควรเหมือนกันถ้าฉันจำได้ (มันผ่านมานานแล้วตั้งแต่ฉันต้องใช้ Slow Cheetah)
Ellesedil

อีกทางเลือกหนึ่งที่ช้า cheater คือการสร้าง myotherconfig.staging.config และใน web.Staging.config การแปลงเปลี่ยนการอ้างอิงถึง myotherconfig.config ใน web.config
nologo

3
เพียงแค่การชี้แจงเล็กน้อยที่อาจช่วยให้บางคน: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"ส่วนควรจะใช้ในเว็บสิ่งที่กำหนดไว้และไม่ได้อยู่ในไฟล์ Web.config
user3533716

11

แทนที่ AppSettings ทั้งหมด

นี่เป็นกรณี overkill ที่คุณต้องการแทนที่ส่วนทั้งหมดของ 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: ตัวระบุตำแหน่งเนื่องจากไม่มีอะไรให้ค้นหา - ฉันแค่ต้องการล้างกระดานชนวนที่สะอาดและแทนที่ทุกอย่าง

<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 config นั่นง่ายมาก!


9

หากคุณต้องการเปลี่ยนการตั้งค่าแอพของคุณจากไฟล์กำหนดค่าเว็บเป็นเว็บเปิดตัวการกำหนดค่าใหม่คุณต้องทำตามขั้นตอนต่อไปนี้ ให้ไฟล์การตั้งค่าแอป web.config ของคุณเป็นแบบนี้ -

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

ตอนนี้ที่นี่เป็นเว็บเปิดตัวสำหรับการเปลี่ยนแปลง

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

สิ่งนี้จะแปลงค่าของ K1 เป็นค่าใหม่ในโหมดเรียล


1

ฉันไม่ชอบการแปลงเพื่อให้มีข้อมูลมากกว่าที่จำเป็น ดังนั้นแทนที่จะงบการเงินเฉพาะกิจกุญแจผมก็ระบุสภาพและความตั้งใจ จะเห็นความตั้งใจได้ง่ายกว่าเมื่อทำอย่างนี้อย่างน้อย IMO นอกจากนี้ฉันพยายามและวางxdtคุณลักษณะทั้งหมดก่อนเพื่อบ่งบอกผู้อ่านสิ่งเหล่านี้เป็นการเปลี่ยนแปลงและไม่ใช่สิ่งใหม่ที่ถูกกำหนด

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

ในข้างต้นจะง่ายกว่ามากที่จะเห็นว่าคนแรกคือการลบองค์ประกอบ คนที่สองคือการตั้งค่าคุณลักษณะ มันจะตั้งค่า / แทนที่คุณสมบัติใด ๆ ที่คุณกำหนดไว้ที่นี่ ในกรณีนี้มันก็จะตั้งไปvaluefalse

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.