前陣子有篇文章提到微軟中止.NET 4.0/4.5/4.5.1技術支援,結論是:1) Windows預設會自動升級到.NET 4.5.2,2) 用.NET 4.0/4.5/4.5.1寫的程式不需修改就可直接執行(僅有極少例外)。

很妙的是,每回建立新專案,我下意識總是挑選較低版本,例如:開.NET 4專案若沒用到async、await等.NET 4.5專屬特色,我會優先選.NET 4.0,心裡總覺得:萬一使用者的電腦的.NET版本比較舊,程式也能跑。

其實,依目前.NET的版本更新政策,使用者機器都該升級到.NET 4.5.2,唯一的例外是Windows XP/Windows 2003,而我程式部署對象全部都是Windows 7以上,換言之,選.NET 4.0根本不會有任何好處!但我總是沒來由的偏好舊版,已然變成一種「舊版相容情結」。

但,也不致於有壞處吧?我以前也這麼想,直到我膝蓋中了一箭…

上週分享的Visual Studio程式碼剪貼修正小工具,依照自己不成文的慣例,我又選了.NET 4.0。而在處理剪貼簿讀取時,發現取出的HTML內容,中文變成亂碼…

起初以為是單純中文編碼問題,試著用Big5解成byte[]再以UTF8轉回字串,由於某些字元被吃掉,研判是底層解析階段已發生不可逆的資料遺失,不可能靠轉碼還原。我可是打不死的小強老士官長耶,豈有被這種小問題難倒的道理?開始動腦筋想如何直接回取回原始資料,不走.NET元件,莫非要呼叫Windows API?

爬文找到一篇文章,針對同樣問題做了剖析,確認這是.NET 4.0的已知問題,已經在.NET 4.5+修正。

將專案版本切到.NET 4.5.2,什麼都沒改,問題消失!

由這次經驗,我決定調整自己的.NET版本選擇原則:除非有很明確且無法抵抗的版本限制(例如:幫田僑仔阿土伯寫「地契管理系統  for XP」),否則一律選用最新版本並要求使用者升級。新版本排除掉一些Bug、修正安全漏洞,基本上要比舊版好,像本次案例,用新版的話當場少踩一個坑。

別跟自己過不去,新專案請用.NET 4.5.2/4.6.1!

註:該選擇.NET 4.5.2還是.NET 4.6.1?我沒找到權威解答,猜想差別在於部署廣度,目前只有Widows 10內附.NET 4.6,其他版本Windows需要另外下載安裝。(如有錯請指正)


Comments

Be the first to post a comment

Post a comment