您的位置:首页 > 其它

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

2019-02-19 18:03 609 查看

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

安装之后,你就可以在Visual Studio2017的Analyze菜单中找到Analyze Assembly Portability项。点击后,你可以选择exe或者dll文件,来进行.NET Standard的兼容性分析。

但一般来说,我们是希望迁移自己的Class Library,所以我们是有源代码的,那么兼容性的检查就更简单了。只需要在Solution Explorer中右键点击要分析的Project,然后选择Analyze Assembly Portability即可。

我这里想用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的其他平台捞食)。当然你要指望学了就能在一线城市买两套房走上人生巅峰什么的,还不如锻炼身体去白马会所面试看看……

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐