上一篇咱们简单介绍了.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