感謝網友提出問題(需求)讓我鐵人賽平安度過一天
在一次讀書會的時候,某位朋友提到他的 ASP.NET 專案是使用 Monorepo 的方式在管理。所以他希望 .NET 有依組態的選擇,發布出來的東西不一樣的功能。像是不同的語系,能用不同組態來區分。如果發布的組態是Japan,那產出的專案裡面只有日本語系,不會有英文、中文。
他又更進一步舉例,公司接的甲、乙、丙、丁專案,都是Base在零號專案上,什麼Controller、Model之類的,幾乎是共用。Monorepo 能提高他的維護容易度,核心有修正,每個專案發佈出去都是最新的核心。
但是他遇到了一個問題,就是發佈的時候,有些功能是甲有乙沒有。所以要額外選擇開啟或關閉某個功能。如果乙沒有這功能(他指Controller),不是程式執行中用邏輯判斷關閉,而是發佈的乙專案就沒有這個功能(Controller)。目前網友是發佈前手動停用某些功能,來達到發佈出去的乙專案內不含該功能。所以他希望能透過組態的方式來控制這件事。
(聽對方描述似乎前端框架已有這種功能!?)
其實,我當下聽到 Monorepo 這個概念的時候,整個大腦都在星爆。
不過最前面他說希望能發佈的語系檔不同,我倒是有想法!
ASP.NET 的多國語系(i18n)是放在App_LocalResources
資料夾裡,我們稍微動點手腳就行了。
我們可以寫一些腳本(Script)對專案設定建置前事件或建置後事件,來對專案做額外的處理。
在這裡我決定寫一段腳本,在建置前替換位於App_LocalResources
裡的語系檔。
例如放在App_MyLocalResources
裡的語系檔,才是真正的語系檔。當我選擇中文組態的時候,就把中文的語系檔拿去替換。
腳本如下:
if "$(ConfigurationName)" == "中文" (
copy "..\App_MyLocalResources\zh-tw.aspx.resx" "..\App_LocalResources\Default.aspx.resx" /y
) ELSE (
copy "..\App_MyLocalResources\Default.aspx.resx" "..\App_LocalResources\Default.aspx.resx" /y
)
對專案右鍵,點選屬性
選擇建置事件
這樣當你選擇中文組態的時候,進行建置你就會看到位於App_LocalResources
裡的Default語系檔,其內容已經被替換成中文語系。
如果有更好的做法,歡迎各位網友補充。
另外,其實我每天都在煩惱明天要寫什麼內容,如果有想聽的主題,歡迎留言給我,感謝你:)