迁移桌面程序到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.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的其他平台捞食)。当然你要指望学了就能在一线城市买两套房走上人生巅峰什么的,还不如锻炼身体去白马会所面试看看……
迁移桌面程序到MS Store(6)——.NET Portability Analyzer的更多相关文章
- 迁移桌面程序到MS Store(5)——.NET Standard
接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...
- 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程
之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了. UWP什么的很久没有正儿八经写了,国内的需求 ...
- 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component
在上一篇<迁移桌面程序到MS Store(7)——APPX + Service>中,我们提到将desktop application拆分成UI Client+Service两部分.其中UI ...
- 迁移桌面程序到MS Store(9)——APPX With Desktop Extension
在<迁移桌面程序到MS Store(8)——通过APPX下载Win32Component>中我们讨论了通过APPX来下载Service部分的安装包.但是纯UWP的客户端并不能自动运行下载的 ...
- 迁移桌面程序到MS Store(10)——在Windows S Mode运行
首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...
- 迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas
我们在<迁移桌面程序到MS Store(4)——桌面程序调用Win10 API>提到了对Win10 API的调用,但仍存在无法在WPF中使用UWP控件的问题,虽然都是XAML控件,但却是两 ...
- 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用
假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...
- 迁移桌面程序到MS Store(14)——APPX嵌入WCF Service以Admin权限运行
Windows10 1809版本开始,微软又对UWP开放了新的Capability:AllowElevation. 通过这个新的Capability,UWP APP能够在运行时向用户请求Admin权限 ...
- 迁移桌面程序到MS Store(2)——Desktop App Converter
迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...
- 迁移桌面程序到MS Store(3)——开机自启动
迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...
随机推荐
- Robotframework与unittest对比
都可以自动挂ui测试 都可以自动化接口测试
- 安装ADT和ADK到eclipse
1.安装好JDK后,配置一下环境变量: 为了配置JDK的系统变量环境,我们需要设置三个系统变量,分别是JAVA_HOME,Path和CLASSPATH.下面是这三个变量的设置防范. JAVA_HOME ...
- HTML5基础实例
<!DOCTYPE html> <!--声明HTML文档--> <html> <head> <title>我的网页</title> ...
- Python之异常处理和socket套接字连接7
一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...
- Java日期时间使用总结[转载]
Java日期时间使用总结 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式 ...
- Bootstrap Table 超多列 使用滚动条
overflow-x: scroll;横向滑动详细讲解 able显示滚动条,要先把table放到一个div中,控制div 属性overflow值为scroll <div style=" ...
- PHP时间范围:本周、本月、下月等简写
在阅读TP5.1源码,发现其在时间范围上的写法很特别,个人第一次见,做一次记录 $timeRule = [ 'today' => ['today', 'tomorrow'], 'yesterda ...
- Edifact 95B报文解读
PART 1 INTRODUCTION D100_D.95B PART 2 UNIFORM RULES OF CONDUCT FOR INTERCHANGE PART2_D.ZIP(1) OF TRA ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记五之铭文升级版
铭文一级: 单节点单broker的部署及使用 $KAFKA_HOME/config/server.propertiesbroker.id=0listenershost.namelog.dirszook ...
- 11-border(边框)
边框 border:边框的意思,描述盒子的边框 边框有三个要素: 粗细 线性样式 颜色 border: solid 如果颜色不写,默认是黑色.如果粗细不写,不显示边框.如果只写线性样式,默认的有上下左 ...