.NetCore技术研究-.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 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 ? ?? ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IE10 SCRIPT5009:’__doPostBack’未定义
- asp.net-mvc-2 – MVC Html.TextBoxFor MaxLength和Value
- asp-classic – 在经典的asp-reposting表单上捕获SQL注入会
- asp.net – 将Always Encrypted Certificate放在IIS 7.5 We
- asp.net – 为什么不删除Server和X-Powered-By标头?
- asp.net-core – 使用.net核心进行Hangfire依赖注入
- 当空的asp.net时,ListView LayoutTemplate不显示
- asp.net-mvc – ASP MVC中的视图中的权限
- ASP.NET Webforms ASP.NET Ajax与ASP.NET MVC和Ajax框架自由
- asp.net-mvc – 在MVC WebApi中的方法如何映射到http动词?
- asp.net-mvc – 当注入服务或控制器的依赖关系太
- asp.net-mvc – 可以在运行时更改数据注释吗? (
- asp.net-mvc – MVC 3从web.config中的AppSettin
- asp.net – linq to sql update standard
- asp.net – IIS 7.5几分钟后,Localhost停止解析
- 如何在ASP.NET中使用列表<>集合作为Repeater数据
- asp.net-mvc – 如何扩展html.textboxfor以删除n
- asp.net-mvc – 使用Ninject注册到自定义成员资格
- 如何使用ASP.NET更改HTML页面元素的CSS类?
- 动态加载asp.net网站中的用户控件(ascx)