由於最近公司簡訊的專案增加,為了因應各個客戶的需求,程式碼通常都會有一堆的設定,不管是放在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 需先安裝File Nesting 功能(https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileNesting),請先確認是否有安裝File Nesting。
新增設定轉換檔
在新增轉換檔前,先確認你的方案組態設定,當新增轉換檔會自動依照方案設定的組態自動產生相對應的設定檔。
再來,將方案總管內想要新增轉換檔的config、xml及json點擊右鍵,選擇Add Transform。
第一次新增會跳出一個警告視窗,要你確認是否要在專案內加入SlowCheetah的NuGet的套件,這裡選擇”是(Y)”,就會自動在專案內加入SlowCheetah的參考。
接著,就會出現轉換檔,檔名格式為App.{組態名稱}.config,如果有安裝File Nesting套件,就會以階層的方式顯示。
轉換檔的操作
以此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可以說是非常的符合現在的趨勢,對於設定檔的轉換,不僅僅會增加程式佈署及發行的速度,並且可以更方便做好版本控管,不再需要每次在進行程式佈署都要花一堆時間在確認或調整設定,實在是非常的方便呢!