Cách thay đổi giá trị của thuộc tính trong phần appSinstall bằng chuyển đổi Web.config


260

Có thể chuyển đổi tệp ứng dụng Web.config sau đây không:

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

vào một cái gì đó như thế này:

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

Vì vậy, tôi cần loại bỏ khóa phát triểnModeUserId và tôi cần thay thế giá trị cho khóa phát triển khóa .

Câu trả lời:


452

Bạn muốn một cái gì đó như:

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

Xem thêm: Cú pháp chuyển đổi Web.config cho triển khai dự án ứng dụng web


24
Lưu ý các phím là trường hợp nhạy cảm!
Cosmin

2
Câu trả lời tuyệt vời. Tôi đã thử các lựa chọn của bên thứ 3 như Slow Cheetah và không đi đến đâu - điều này thật đơn giản và hoàn hảo.
Steve

2
@stevens: Bạn sẽ cần Slow Cheetah nếu bạn muốn chuyển đổi các tập tin app.config cho các ứng dụng gốc. Tuy nhiên, cú pháp phải giống hệt nhau nếu tôi nhớ lại (đã được một thời gian kể từ khi tôi phải sử dụng Cheetah chậm).
Ellesedil

một cách khác để gian lận chậm là tạo myotherconfig.staging.config và trong biến đổi web.Staging.config, chuyển đổi tham chiếu thành myotherconfig.config trong web.config
nologo

3
Chỉ cần làm rõ một chút có thể giúp một số người: xdt:Transform="SetAttributes" xdt:Locator="Match(key)"phần này nên được sử dụng trong Web.Whthing.config chứ không phải trong tệp Web.config.
dùng3533716

11

Thay thế tất cả Cài đặt ứng dụng

Đây là trường hợp quá mức mà bạn chỉ muốn thay thế toàn bộ một phần của web.config. Trong trường hợp này, tôi sẽ thay thế tất cả Cài đặt ứng dụng trong web.config sẽ cài đặt mới trong web.release.config. Đây là ứng dụng web.config cơ sở của tôi Cài đặt:

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

Bây giờ trong tệp web.release.config, tôi sẽ tạo một phần appSinstall ngoại trừ tôi sẽ bao gồm thuộc tính xdt: Transform =, Thay thế Thay vì tôi chỉ muốn thay thế toàn bộ phần tử. Tôi không phải sử dụng xdt: Locator vì không có gì để định vị - tôi chỉ muốn xóa sạch bảng và thay thế mọi thứ.

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

Lưu ý rằng trong tệp web.release.config, phần cài đặt ứng dụng của tôi có ba khóa thay vì hai và các khóa thậm chí không giống nhau. Bây giờ hãy xem tệp web.config đã tạo, điều gì sẽ xảy ra khi chúng tôi xuất bản:

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

Đúng như chúng tôi dự đoán - ứng dụng web.config đã được thay thế hoàn toàn bởi các giá trị trong cấu hình web.release. Điều đó thật dễ dàng!


9

Nếu bạn muốn thực hiện chuyển đổi cài đặt ứng dụng của mình từ tệp cấu hình web sang web.Release.config, bạn phải thực hiện các bước sau. Hãy để tập tin cài đặt ứng dụng web.config của bạn là đây-

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

Bây giờ đây là web.Release.config để chuyển đổi.

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

Điều này sẽ biến đổi giá trị của K1 thành giá trị mới trong Chế độ thực.


1

Tôi không thích biến đổi để có thêm thông tin hơn mức cần thiết. Vì vậy, thay vì nghỉ ngơi các phím, tôi chỉ cần nêu điều kiệný định . Sẽ dễ dàng hơn nhiều để thấy ý định khi được thực hiện như thế này, ít nhất là IMO. Ngoài ra, tôi thử và đặt tất cả các xdtthuộc tính lên đầu tiên để chỉ cho người đọc, đây là những biến đổi và không phải là những điều mới được xác định.

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

Ở trên, dễ dàng hơn nhiều để thấy rằng cái đầu tiên đang loại bỏ phần tử. Cái thứ 2 là thiết lập các thuộc tính. Nó sẽ đặt / thay thế bất kỳ thuộc tính nào bạn xác định ở đây. Trong trường hợp này, nó sẽ chỉ được đặt valuethành false.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.