[ 技術探討 ] 設定轉換工具SlowCheetah

由於最近公司簡訊的專案增加,為了因應各個客戶的需求,程式碼通常都會有一堆的設定,不管是放在App.config 或 Web.config 甚至是自行設計的XML及Json,但是通常會因為專案時間久了會遺忘客戶環境的設定,就會需要找文件,然後一項一項的確認來避免設定錯誤。
今天要向大家介紹一個方便的工具,SlowCheetah,用來對XML及Json檔進行分支,可以讓程式發行同時就可以完成設定環境的工作。

 

下載及安裝

這裡要安裝的套件可以在微軟網站上下載(https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms),或是在Visual Studio,點選工具→擴充功能和更新(U),然後搜尋SlowCheetah,安裝並重新啟動Visual Studio。

SlowCheetah-01

SlowCheetah-02

要使用SlowCheetah 需先安裝File Nesting 功能(https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileNesting),請先確認是否有安裝File Nesting。

SlowCheetah-03

新增設定轉換檔

在新增轉換檔前,先確認你的方案組態設定,當新增轉換檔會自動依照方案設定的組態自動產生相對應的設定檔。

 

SlowCheetah-04

再來,將方案總管內想要新增轉換檔的config、xml及json點擊右鍵,選擇Add Transform。

SlowCheetah-05

第一次新增會跳出一個警告視窗,要你確認是否要在專案內加入SlowCheetah的NuGet的套件,這裡選擇”是(Y)”,就會自動在專案內加入SlowCheetah的參考。

SlowCheetah-06

接著,就會出現轉換檔,檔名格式為App.{組態名稱}.config,如果有安裝File Nesting套件,就會以階層的方式顯示。

SlowCheetah-07

 

轉換檔的操作

以此App.congfig為例,剛新增完的轉換檔,會是一個只有configuration節點的檔案,其運作的機制是如果轉換檔沒任何異動,就會繼承來源檔的資料,以下舉幾個例子來簡單介紹其運作。

未異動的狀況

Source:App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
 </startup>
 <appSettings>
  <add key="TestKey" value="Source" />
 </appSettings>
</configuration>
Transform:App.Debug.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
</configuration>
Result
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
 </startup>
 <appSettings>
  <add key="TestKey" value="Source" />
 </appSettings>
</configuration>

 

異動後的轉換

Source:App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
 </startup>
 <appSettings>
  <add key="TestKey" value="Source" />
 </appSettings>
</configuration>
Transform:App.Debug.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
 <appSettings>
  <add key="TestKey" value="HiDebug" />
  <add key="TestKeys" value="Hi!Debug!" />
 </appSettings>
</configuration>
Result
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
 </startup>
 <appSettings>
  <add key="TestKey" value="HiDebug" />
  <add key="TestKeys" value="Hi!Debug!" />
 </appSettings>
</configuration>

 

 

Json的轉換範例

由於 .Net Core 的設定檔都是Json格式,所以微軟在2017的Q1已經提出了Json格式的解決方案,以下也用一些基本的範例介紹Json轉換檔的操作。

資料的轉換

Source
{
  "Version": 1,
  "Settings": {
    "Setting01" : "Default01",
    "Setting02" : "Default02"
  },
  "SupportedVersions" : [1, 2, 3]
}
Transform
{
  "Version": 2,
  "Settings": {
    "Setting01" : "NewValue01",
    "Setting03" : "NewValue03"
  },
  "SupportedVersions" : [4, 5],
  "UseThis" : true
}
Result
{
  "Version": 2,
  "Settings": {
    "Setting01" : "NewValue01",
    "Setting02" : "Default02",
    "Setting03" : "NewValue03"
},
  "SupportedVersions" : [1, 2, 3, 4, 5],
  "UseThis" : true
}

 

屬性名稱的重新命名

Source
{
    "A": {
        "A1": 11,
        "A2": {
            "A21": 121,
            "A22": 122
        }
    },
    "B": [
        21,
        22
    ],
    "C": 3
}
Transform
{
    "@JDT.Rename": {
        "A": "Astar",
        "B": "Bstar"
    }
}
Result
{
    "Astar": {
        "A1": 11,
        "A2": {
            "A21": 121,
            "A22": 122
        }
    },
    "Bstar": [
        21,
        22
    ],
    "C": 3
}

結論

隨著現在軟體開發的需求,先排除專案管理不說,大量及快速的開發、發行、佈署,成為了一個重大的課題,程式的模組化、套件化、自動化已經變成軟體工程的最重要的趨勢, SlowCheetah可以說是非常的符合現在的趨勢,對於設定檔的轉換,不僅僅會增加程式佈署及發行的速度,並且可以更方便做好版本控管,不再需要每次在進行程式佈署都要花一堆時間在確認或調整設定,實在是非常的方便呢!

 

Reference

  1. https://github.com/Microsoft/slow-cheetah
  2. https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms
  3. https://github.com/Microsoft/slow-cheetah
  4. https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料