遷移桌面程序到MS Store(6)——.NET Portability Analyzer

        上一篇咱們簡單介紹了.NET Standard,本篇咱們來實踐.NET Framework 4.5 Class Library到.NET Standard 2.0的轉換.
        首先讓咱們來作一些準備工做。
        第一步,須要將項目組全部同事的Visual Studio統一升級到2017 15.3版本或更新。(程序員鼓勵師不用升級Visual Studio)
        第二步,將要被轉換的.NET 4.5的Class Library升級到.NET 4.7.2。這是由於若是存在早期版本的.NET API在.NET 4.7.2已是過時的,或者被移除了。而咱們找不到替代方案,那麼就能夠停下來喝杯水關掉電腦下班了。
        第三步是咱們今天着重介紹的.NET Portability Analyzer工具,能夠經過分析代碼或DLL來生成報表,報表會顯示你的.NET Framework Class Library和.NET Standard Class Library的兼容性百分比。就個人實際使用經驗來看,通常能夠直接轉換的代碼都會在90%以上。除了一些已明確聲明不在.NET Core中支持的功能。(由於.NET Core就是下一代.NET Framework,因此.NET Core中不支持的,天然.NET Standard也不須要費力去支持了)。
        .NET Portability Analyzer做爲Visual Studio2017的插件能夠在這裏下載:
        https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzergit

安裝以後,你就能夠在Visual Studio2017的Analyze菜單中找到Analyze Assembly Portability項。點擊後,你能夠選擇exe或者dll文件,來進行.NET Standard的兼容性分析。程序員

但通常來講,咱們是但願遷移本身的Class Library,因此咱們是有源代碼的,那麼兼容性的檢查就更簡單了。只須要在Solution Explorer中右鍵點擊要分析的Project,而後選擇Analyze Assembly Portability便可。github

我這裏想用Newtonsoft.Json來舉個例子,來講明這種通用性很強的Library遷移到.NET Standard 2.0可能存在的問題,及須要的工做量。
咱們從Github上clone一份Newtonsoft.Json的源代碼,經過.NET Portability Analyzer的分析,能夠獲得一份Excel表格,咱們着重看.NET 4.5和.NET Standard 2.0兩行,能夠發現當前的代碼100%兼容這兩個.NET版本。面試

咱們發如今.NET Standard 1.3版本存在一些不兼容。點擊Excel表格的Details頁,裏面會列出具體的不兼容項,這裏會發現緣由是部分類型直到.NET Standard 1.6以上的版本才獲得支持。同時若是存在不一樣的語法或者替代類可使用,在最後一列的Recommended changes中會列出。數據結構

完成Analyze Assembly Portability後,咱們就能夠根據結果決定是否要進行遷移了。
本篇的主要內容到這裏就結束了。接下來就上一篇提到的,展望一下.NET Core。
.NET Core能夠理解就是將來版本的.NET Framework。主要的關鍵詞有如下幾個:
 • 開源:都在 https://github.com/dotnet/corefx 上了,好奇某個類是如何實現的,能夠肆無忌憚的查看源碼了。
 • 跨平臺:支持Windows,macOS和Linux。
 • 兼容性:經過.NET Standard來保持和.NET Framework, Xamarin和Mono的兼容。
當前最新版本是2.2,重心依然是ASP.NET Core(傳統的ASP.NET Web Forms和ASP.NET MVC將不會在.NET Core獲得支持)。雖然官方的說法是UWP也是built on top of .NET Core。但我暫時並無領會到某軟的意思。工具

可喜的是,在即將到來的.NET Core 3.0版本中,對desktop development有了更多的補充,傳統的Winform和WPF會具備更好的性能,以及獲得完整的Win10 API的支持。
.NET Core的基礎類庫中,90%的代碼都是平臺無關的。平臺依賴的部分,某軟舉例CoreCLR,SystemIO和System.Security.Cryptography.Algorithms,這些都是依賴特定操做系統的實現。
平臺無關的部分舉例也很好理解,好比System.Collections和System.Linq啥的,依賴的是數據結構的定義,而不是操做系統。性能

因此對使用微軟技術的開發者來講,.NET Core便是將來吃飯的傢伙(還能夠去非Windows的其餘平臺撈食)。固然你要期望學了就能在一線城市買兩套房走上人生巔峯什麼的,還不如鍛鍊身體去白馬會所面試看看……ui

相關文章
相關標籤/搜索