迁移桌面程序到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

相关文章
相关标签/搜索