上一篇咱們簡單介紹了.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