.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主要特性

640?wx_fmt=png

   同时支持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. 如下图:

  640?wx_fmt=png

 .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等的版本,有个对照表:

   640?wx_fmt=png

   这张表非常重要。体现了一个规则:

   假如程序的目标框架Targetframework 使用.NET Standard2.0, 则支持:

   .NET Core 2.0版本的工程可以引用

   .NET 4.6 版本的工程可以引用

    但是低版本的.NET Core和.NET Framework则无法引用。

五 .NET Core Roadmap&版本选择

 先看一下.NET Core最新的Roadmap:

  640?wx_fmt=png

 最新的.NET Core 3.1 将2019年11月发布,同时是LTS版本。如果大家现在开始迁移.NET Core,建议选择一个大版本、LTS版本。我们也将选择这个版本。

原文链接:https://www.cnblogs.com/tianqing/p/11619005.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉排序树或二叉搜索树

一、二叉树基础 1.1 二叉排序树定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。它是一颗空树,或者具有下列性质: 若它的左子树不为空,则左子树上所有结点的值…

沈向洋对于工程技术人员的十点经验分享

沈向洋目前是微软的执行副总裁,人工智能与研究部门的最高负责人。他是计算机视觉和图形学研究的世界级专家,是美国电气电子工程协会院士(IEEE Fellow)及是国际计算机协会院士(ACM Fellow),曾任国…

.Net Core中间件和过滤器实现错误日志记录

1.中间件的概念ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件。每个中间件可以:选择是否将请求传递给管道中的下一个组件。可以在调用管道中的下一个组件之前和之后执行业务逻辑。中间件是一个请求委托&#…

最大堆、最小堆Java实现,解决TOP K问题

一、基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解。 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树所有父节点的值小于或等于两个子节点的值 1.2 什么是完全二叉树 除了最后…

使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群

在《容器化单页面应用中RESTful API的访问》以及《容器化单页面应用中Nginx反向代理与Kubernetes部署》两篇文章中,我介绍了一套容器化ASP.NET Core应用程序的方案,并对于Nginx反向代理的使用进行了介绍。在《使用Rancher在Microsoft Azure上搭建Kuberne…

微软如何利用机器学习改进Win 10更新体验

微软在 2018 年 4 月 Windows 更新时第一次大规模使用机器学习(ML),ML 通过监测 PC 运行状况的六个核心领域(例如总体可靠性),以确定功能更新过程是否顺利进行。而在 2019 年 5 月发布的更新推送中&#xf…

使用.NET Core创建Windows服务(一) - 使用官方推荐方式

原文:Creating Windows Services In .NET Core – Part 1 – The “Microsoft” Way创建Windows服务来运行批处理任务或者运行后台任务,是一种非常常见的模式,但是由于云服务(Amazon Lambda, Azure WebJobs以及Azure Functions&am…

关于.NET HttpClient方式获取微信小程序码(二维码

随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来。近来分析了一项生成有关生成微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数);看了下小程序官方文档,以及网上的例子,未看到…

从零开始使用Skywalking分布式链路追踪系统

当我们用很多服务时,各个服务间的调用关系是怎么样的?各个服务单调用的顺序\时间性能怎么样?服务出错了,到底是哪个服务引起的?这些问题我们用什么方案解决呢,以前的方式是各个系统自己单独做日志,出了问题…

快速排序 (Quick Sort)(Java实现)

快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出。 1、基本思想 快速排序的基本思想:挖坑填数分治法。 首先选一个轴值(pivot,也有叫基准的),通过…

使用.net core3.0 正式版创建Winform程序

前阵子一直期待.net core3.0正式版本的出来,以为这个版本出来,Winform程序又迎来一次新生了,不过9.23日出来的马上下载更新VS,创建新的.net core Winform项目,发现并没有Winform窗体设计器。而微软目前则是通过插件的方…

深入理解 ValueTask

.NET Framework 4 里面的命名空间为 System.Threading.Tasks的 Task 类。这个类以及它派生的 Task<TResult> 早已成为编程的主要部分&#xff0c;在 C#5 中的异步编程模式当作介绍了 async/await。在这篇文章里&#xff0c;我会覆盖新的类 ValueTask / ValueTask<TRes…

NET Core 3.0 AutoFac替换内置DI的新姿势

.NET Core 3.0 和 以往版本不同&#xff0c;替换AutoFac服务的方式有了一定的变化&#xff0c;在尝试着升级项目的时候出现了一些问题。原来在NET Core 2.1时候&#xff0c;AutoFac返回一个 IServiceProvider 参数注入到ConfigureServices .NET Core 服务中&#xff0c;基本大痣…

asp.net core 使用Mysql和Dapper

序曲&#xff1a;学习编程最好的方式就是敲代码&#xff0c;没有比这个更好的方法&#xff0c;哪怕你看了上百G的视频&#xff0c;都不如你自己敲几行代码更为有效。还有要记得敲完代码然后写一篇随笔来记录一下你所学所想。大家都知道&#xff0c;.netcore是微软一个具有历史意…

CSFR(跨站请求伪造)攻击与防御

一、CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;也被称为&#xff1a;one click attack/session riding&#xff0c;缩写为&#xff1a;CSRF/XSRF。 二、CSRF可以做什么&#…

Vue 3源码公布

10 月 5 日凌晨&#xff0c;Vue.js 框架的作者兼核心开发者尤雨溪公布了尚处于 Pre-Alpha 状态的 Vue 3 源码。说学不动的童鞋抓紧剩余的假期时间撸一遍源码吧 : D作者表示&#xff0c;Vue 3 主要的架构改进、优化和新功能均已完成&#xff0c;剩下的主要任务是完成一些 Vue 2 …

在副业刚需的时代,如何掌握副业的正确姿势?

前言近期&#xff0c;伴随着“副业刚需”这个词语的流行&#xff0c;关于“职场人要不要发展副业”的话题再一次被炒得沸沸扬扬。有人认为副业是刚需&#xff0c;是抵御中年危机的锦囊妙计&#xff0c;甚至是中年人该有的自觉&#xff0c;没有副业的人不足以谈人生&#xff0c;…

使用.NET Core创建Windows服务(二) - 使用Topshelf方式

原文&#xff1a;Creating Windows Services In .NET Core – Part 2 – The “Topshelf” Way作者&#xff1a;Dotnet Core Tutorials译者&#xff1a;Lamond Lu译文&#xff1a;使用.NET Core创建Windows服务&#xff08;二&#xff09; - 使用Topshelf方式使用.NET Core创建…

常用加密算法(Java实现)总结

1、Java的安全体系架构 Java中为安全框架提供类和接口。JDK 安全 API 是 Java 编程语言的核心 API&#xff0c;位于 java.security 包&#xff08;及其子包&#xff09;&#xff0c;以及sun.securityAPI包&#xff08;及其子包&#xff09;中。设计用于帮助开发人员在程序中同…

怎样的项目才能称为“成功项目”?

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区合伙人&#xff01;引子这个故事讲的是一家拥有百年历史的制造业大厂的信息化转型过程中的波折。这家企业拥有超过三万名员工&#xff0c;它是某行业的领先品牌&#xff0c;但是在信息化程度上却…