由於最近公司簡訊的專案增加,為了因應各個客戶的需求,程式碼通常都會有一堆的設定,不管是放在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可以說是非常的符合現在的趨勢,對於設定檔的轉換,不僅僅會增加程式佈署及發行的速度,並且可以更方便做好版本控管,不再需要每次在進行程式佈署都要花一堆時間在確認或調整設定,實在是非常的方便呢!






