前段时间迁移. 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 版本. 我们也将选择这个版本.
周国庆
2019/10/03
来源: https://www.cnblogs.com/tianqing/p/11619005.html