[.NET] Web.config / App.config Transformation (switch Debug or Release mode)

[.NET] Web.config / App.config Transformation (switch Debug or Release mode)

在某些情況之下我們可能會依照環境而調整程式中的參數,比如說連線字串

如何同時維護 Debug/Release 模式?我們有幾種手法來調整不同環境的參數

  1. 手動調整(駐解/反駐解)
  2. #if(Debug)
  3. Conditional
  4. 組態檔Web.config / App.config

本篇要介紹的就是最後一種方式,組態檔。

  1. 組態檔預設已經有 Web.config、Web.Debug.config、Web.Release.config 三種檔案
  2. Winform 及 Console 沒有這樣的檔案 Debug/Release ,所以可以安裝 SlowCheetah 擴充工具

image

 

使用情境:

假設我有三種環境,三種環境的組態設定都不一樣,我該如何做?

image

 

本文連結


Web Site

首先,我在 Web.config 組態檔裡,有一個 appSetting,名為 test

@Web.config

<appSettings>
  <add key="test" value="開發環境" />
</appSettings>

 

再來為Debug及Release模式加上 xdt:Transform="SetAttributes" xdt:Locator="Match(key) 標籤

@Web.Debug.config

<appSettings>
  <add key="test" value="測試環境" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

 

@Web.Release.config

<appSettings>
  <add key="test" value="正式環境" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

 

當我在 VS 按 Ctrl+F5 的時候,用的是Web.config:

image

 

按下發行(debug)時,用的是Web.Debug.config:

SNAGHTML3faf19

 

按下發行(Release)時,用的是Web.Release.config:

SNAGHTML3f41aa

 

 

 

透過 Transform 標籤,VS 在建置模式可以幫我們替換掉組態檔的 test 的 value

image

 

PS.若對 Web 發行有問題可以參考

http://www.dotblogs.com.tw/yc421206/archive/2013/03/15/96849.aspx

http://www.dotblogs.com.tw/yc421206/archive/2014/01/21/141965.aspx

 

PS.若是要替換連線字串,原本我們要 Match(Key),改成Match(name),Transform標籤也不需要特別記下寫法,抄 VS 給予的範例就可以了

image

 


 

Winform / Console

Winform / Console應用程式,在安裝完擴充套件之後就有 Add Transform 的功能,也能夠輕易的產生出App.Debug.config / App.Release.config,使用方式也跟 Web Site 一模一樣

image

 

預設它就沒有像 Web 那樣有三種模式,不過我們可以自己加上一個 Dev mode,如下圖步驟:

image

image

image

 

延用上一個範例情境,我們也可以有三種開發模式

Dev(開發環境)

image

 

Debug(測試環境)

image

 

Release(正式環境)

image

 

PS.應用程式除了打包帶走之外,使用 ClickOnce 也是一種選擇

http://www.dotblogs.com.tw/yc421206/archive/2012/03/02/70464.aspx

http://www.dotblogs.com.tw/yc421206/archive/2012/03/07/70564.aspx

http://www.dotblogs.com.tw/yc421206/archive/2013/03/25/98870.aspx

 


 

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/07/28/146082.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo