[C#] 如何依組態切換App.config中的設定值

如何依組態切換App.config中的設定值

前言

 

在開發過程中通常會將一些變動性參數資料納入Config檔中,方便程式佈署到正式環境時可依現況進行調整。在Web專案中,我們可輕易地依照組態來切換設定檔(Web.Debug.config/Web.Release.config),決定發行時Web.config中設定值為何;反觀Win專案(WinFrom/Console)卻沒有提供此便捷的機制,因此可利用Configuration Transform工具來進行實踐。

 

image

 

 

實作介紹

 

首先請安裝Configuration Transform擴充功能工具

 

image

 

安裝後就可以在App.config上右鍵點選Add Config Transforms產生相對應config檔

 

image

 

各組態所對應config檔立即被產出(App.Debug.config / App.Release.config)

 

image

 

 

接著就可以著手來調整各組態對應config檔。首先假設原本App.config如下。

<configuration>
  <appSettings>
    <!--資料儲存位置-->
    <add key="ReportPath1" value="D:\DefaultDir1\" lockItem="true" />
    <add key="ReportPath2" value="D:\DefaultDir2\" lockItem="true" />
    <add key="ReportPath3" value="D:\DefaultDir3\" lockItem="true" />
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

 

接著可依需求來調整App.Debug.config檔,在此簡單測試一下幾個常用的轉換。詳細轉換語法請參考Web 應用程式專案部署的 Web.config 轉換語法文章內容,有更進一步的說明。

<!-- For more information on using app.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
   <!-- 取代整個add項目 (條件為 key==ReportPath1) -->
   <add key="ReportPath1" value="D:\DebugDir1\" xdt:Locator="Match(key)" xdt:Transform="Replace" />
   <!-- 取代add項目中的value屬性 (條件為 key==ReportPath2) -->
   <add key="ReportPath2" value="D:\DebugDir2\" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" />
   <!-- 移除整個add項目 (條件為 key==ReportPath3) -->
   <add key="ReportPath3" value="D:\DebugDir3\" xdt:Locator="Match(key)" xdt:Transform="Remove" />
  </appSettings>
</configuration>

 

可透過Preview Config Transforms功能來檢視轉換後的App.config資訊

 

image

image

 

在Debug模式下編譯過後的App.config確實依App.Debug.config轉換設定進行調整

<configuration>
  <appSettings>
    <!--資料儲存位置-->
    <add key="ReportPath1" value="D:\DebugDir1\" />
    <add key="ReportPath2" value="D:\DebugDir2\" lockItem="true" />
    
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

 

最後讀出App.config資訊來驗證一下是否正確

{
    static void Main(string[] args)
    {
        string reportPath1 = ConfigurationManager.AppSettings["ReportPath1"];
        string reportPath2 = ConfigurationManager.AppSettings["ReportPath2"];
        Console.WriteLine("reportPath1: " + reportPath1);
        Console.WriteLine("reportPath2: " + reportPath2);
        Console.Read();
    }
}

 

[Debug] 確實取出依App.Debug.config檔調整過後的config資訊

 

image

 

[Release] 沒有特別設定App.Release.config檔時,就是套用預設config資訊

 

image

 

 

參考資料

 

https://msdn.microsoft.com/zh-tw/library/dd465326(VS.100).aspx

https://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859


希望此篇文章可以幫助到需要的人

若內容有誤或有其他建議請不吝留言給筆者喔 !