NET Core迁移前工作
前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家。大致有以下几个部分:
1. .NET Core的由来
2. 为什么要迁移.NET Core
3. .NET Core3.X主要特性
4. .NET Standard和.NET Core
5. .NET Core Roadmap&版本选择
接下来,我们详细展开说吧。
一、.NET Core的由来
这个更像是科普的资料,因为团队的小伙伴有半路出家的,对.NET 的光辉历史不是非常了解,所以有必要带着大家看一遍.NETCore的由来:
说.NET Core,需要先说一下.NET. 当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按照JVM标准实现的,据说也是当时性能最好的Java虚拟机。但是微软也是有私心的,微软总想搞点Windows平台上的特性,有点想把Java绑定到Windows平台上的味道,另外Sun公司确实有点小心眼,于是Sun公司就跟微软闹掰了,然后微软就推出了 .NET,.NET从出生开始其实就借鉴了Java,然后又一步步在语言特性、窗体开发等方面实现了超越。Java在1.6版本以后发展缓慢,后面Java也在语言特性上借鉴了 .NET。
.NET虽然一直发展的不错,也有WPF、Unity3D这样具有竞争力框架的出现。但是.NET平台在一些较大的项目,不太受互联网公司的喜爱(虽然京东、当当、携程当年也是.NET技术路线)。但是因为.NET不是开源的框架,也不是可跨平台的框架,那就会带来以下问题:
成本:选择.NET就要选择Visual Studio,Windows Server,license是不可忽视的成本;
生态:没有来自于社区的贡献,那.NET没有诞生优秀框架的土壤,技术社区虽然有微软的特殊扶持,但是整体不太理想
人才:无法吸引一线公司优秀互联网工程师加入,因为他们用Java、Go等,但是.NET Core诞生之后会大为改观,腾讯、网易都有在使用。
纵使有Mono这么强大的框架,可以让 .NET 跑在Linux上,但是这还不够。毕竟Mono只能发挥.NET部分有限的能力。
同时,云计算的普及,跨平台需求势不可挡,Linux 作为Server的不二OS,.NET不支持Linux,比较尴尬!
另外,容器时代已经不可逆转,跟Windows的强依赖,如何上Docker?
总之,形式所迫,拥抱变化和未来,.NET Core应运而生。
二、为什么要迁移.NET Core
总结了以下几点,大家可以补充:
- .NET Core代表着未来.Net的发展方向
- 产品新特性、重点技术支持微软优先考虑在最新.NET Core版本上支持
- 更优的代码、更好的性能,社区大家都在贡献、优化代码
- 跨平台支持,支持部署在Linux,可以降低VM的成本
- Docker部署支持,更低的成本,更高的资源利用率,未来云原生的核心组成
- 面向现代互联网应用、微服务架构、和DevOps更好地集成
- 开源:https://github.com/dotnet/core
- 更好的生态和社区
三、 .NET Core3.X主要特性
同时支持Windows和Linux、MacOS,满足不同开发者的需求,对于Web开发提供了ASP.NET Core, 对于常用数据库访问,提供了EF Core,对于机器学习,提供了ML.NET。大家可以根据自己业务的需要,选择合适的技术。
四、 .NET Standard和.NET Core
先说下事情的起源:
.NET Framework从2002年起,一直在Release新版本,不支持跨平台
.NET Core是为了支持跨平台产生的,类似的有Mono、Xamarin
这样,出现了两套代码、两套类库,对于开发者来说,要同时掌握两套SDK,会产生社区和技术的分裂。
因此,.NET 要统一类库标准,统一所有的API定义,这就是.NET Standard. 如下图:
.NET Standard的统一:
.NET Standard定义了.NET平台,统一实现的一组API。实现.Net Standard API的平台都与目标.Net Standard库兼容;
.NET Framework和.NET Core都是.NET Standard的标准实现。 .NET Standard是二者的交集。
但是.NET Framework和.NET Core存在其个性化、扩展的类库,需要牺牲兼容性,即:
假如用.NET Framework的个性化SDK。例如注册表、Windows Service、Winform,这样只能部署在Windows中。
假如用.NET Core的个性化SDK,部署运行时,与Windows环境下.NET Framework不兼容。
所以,如果应用程序采用.NET Standard,同时支持.NET Framework和.NET Core,则可以实现两者的兼容。一套代码既支持运行在.NET Framework运行时下,又支持运行在.NET Core运行时下。
同时.NET Standard的版本对应.NET Core、.NET Framework、Mono、Xamarin等的版本,有个对照表:
这张表非常重要。体现了一个规则:
假如程序的目标框架Targetframework 使用.NET Standard2.0, 则支持:
.NET Core 2.0版本的工程可以引用
.NET 4.6 版本的工程可以引用
但是低版本的.NET Core和.NET Framework则无法引用。
五 .NET Core Roadmap&版本选择
先看一下.NET Core最新的Roadmap:
最新的.NET Core 3.1 将2019年11月发布,同时是LTS版本。如果大家现在开始迁移.NET Core,建议选择一个大版本、LTS版本。