需要特别注意的是,.NET Core不是.NET Framework的升级版,而是一个从头开始开发的全新平台,因此在.NET Framework下开发的程序并不能直接在.NET Core下运行。但是这并不意味着.NET Core和.NET Framework没有任何关系。.NET Core的很多代码都是直接从.NET Framework中迁移或改造过来的,因此.NET Core中的大部分技术、类库都和.NET Framework保持一致,绝大部分类的用法都没有变,这样就保证了.NET Framework开发人员掌握的技术并没有过时。
读者可能知道有一个技术叫作Mono。Mono是一个诞生于开源社区的、跨平台版本的.NET Framework。可以借助于Mono把由ASP.NET开发的网站放到Linux服务器上运行。既然Mono已经可以让.NET Framework跨平台运行了,那么为什么微软还要推倒重来,开发全新的.NET Core呢?
可以从微软官方对ASP.NET Core的定义中一探究竟,微软对ASP.NET Core的官方定义是:ASP.NETCore是一个跨平台的、高性能的开源框架,用来构建基于云且通过互联网连接的应用程序。这里的关键词是“跨平台”和“基于云”。
“基于云”是指程序可以运行在云服务平台上,并且可以和云服务平台的其他产品进行集成。云服务平台的大部分技术都是开放的,而不是绑定某个具体语言的,因此主流的编程语言都能用于“基于云”的开发,用.NET Framework也可以进行“基于云”的开发。但是“可以”不等于“适合”,就像C语言也能用于开发网站后台,但是很少有开发人员用C语言来开发网站后台一样。
为什么.NET Framework不适合用来开发“基于云”的程序呢?因为经典的“基于云”的场景是把程序部署到容器等运行环境中,这些运行环境不是一个完整的操作系统,所以要求运行在其中的应用程序有很好的自治能力并且占用更少的资源。
考虑到.NET Framework具有如下缺点,故其不适合用来开发“基于云”的程序。
(1).NET Framework属于系统级别安装的程序。操作系统内的所有程序共享一个.NET Framework安装实例,如果一个应用程序需要升级.NET Framework或者为.NET Framework安装补丁,则其他程序也会受影响。
(2).NET Framework必须安装到操作系统上才能使用,不能和应用程序打包到一起独立部署。
(3)ASP.NET框架和IIS(internet information services,互联网信息服务)[1]深度耦合。在生产环境中,ASP.N ET只能运行在IIS上,而IIS只能运行在Windows上,且不同Windows版本的IIS版本也不同。
(4)ASP.NET消耗的资源比较多。为了兼容旧版程序,ASP.NET在运行的时候有很多不必要的内存和CPU消耗。据估计,ASP.NET程序在运行时占用的内存是它实际需要内存的3倍。再如,在ASP.NET MVC(model-view-controller,模型-视图-控制器模式)中,当用户请求到达IIS后,中间要经过非常多的处理管道,最后才能到达控制器。这些管道大多是硬编码的,即使用不到它们,也无法将它们移除,因此ASP.N ET程序无法最大化地发挥硬件的性能。
(5).NET Framework诞生的时候是没有云计算的概念的,因此.NET Framework从创立之初其开发人员就没有考虑到程序会运行在云服务环境中,而且对很多.NET Framework组件的设置都要求被放到Windows系统级别,这导致.NET Framework程序无法做到完全自治。
除此之外,.NET Framework还有很多历史包袱问题。在.NET Framework诞生之初,ASP.NET就等同于ASP.NET Web Forms,但是用ASP.NET Web Forms开发的系统不符合新一代项目开发的要求,因此ASP.NET Web Forms早已被淘汰了,它被2009年正式发布的ASP.NET MVC以及更晚出现的ASP.NET Web API(application program interface,应用程序接口)所取代。从微软的定位来说,ASP.NET运行时应该为.NET平台下的所有Web框架提供基础支持,无论是ASP.NET Web Forms,还是ASP.NET MVC、ASP.NET Web API等,都应该是基于ASP.NET运行时的平等关系。但是微软在早期开发ASP.NET运行时的时候,在ASP.NET运行时中有很多专门为ASP.NET Web Forms编写的代码,而这些代码是ASP.NET MVC、ASP.NET Web API所不需要的,但是ASP.NET MVC、ASP.NET Web API也只能带着这些它们不需要的代码去运行,这导致使用ASP.NET开发出来的系统无法最大化地利用硬件资源。
可以看到,.NET Framework已经有很多不满足新一代的软件设计要求的地方了,而且已经背负很重的历史包袱。如果微软强行把.NET Framework进行跨平台移植,那么这个跨平台版本的.NET Framework为了兼容以前Windows版本的.NET Framework,需要做很多兼容性的处理工作,这样它身上背负的历史包袱就会越来越重,也会把.NET Framework的设计缺陷都带过来。这也是Mono在移植.NET Framework到其他平台时所遇到的困难,正因为这些困难,Mono对于.NET Framework的移植一直是不完善的,这种不完善也导致了没有大的商业项目使用Mono构建Web系统。Mono目前的成功应用反而是用来开发跨平台游戏的Unity和开发手机App的Xamarin,因为它们不是Web系统,所以只用到了.NET Framework的核心功能,没有用到历史包袱重的Web模块。
基于以上这些考虑,微软做出了艰难的决定:推倒重来,从头开发.NET Core。这样.NET Core开发团队就可以摆脱历史包袱来开发.NET Core,因此.NET Core有如下优点。
(1).NET Core采用模块化开发。.NET Core核心只包含很少的文件,所有其他模块都需要单独安装。我们开发的程序用到什么模块,就安装什么模块,这样各个模块都可以单独升级。不同的程序可以选择适合自己版本的组件,不用受系统上安装的其他程序的影响。比如,A程序可以用一个模块的1.5版本,而B程序可以用这个模块的1.8版本,它们不会互相干扰。
(2).NET Core支持独立部署,也就是说,可以把.NET Core运行时环境和开发的程序打包到一起部署。这样就不需要在服务器上安装.NET Core运行环境,只要把程序复制到服务器上,程序就能运行,这对容器化、无服务器(Serverless)等非常友好。
(3)程序的运行效率更高。.NET Core的所有管道都是可以插拔的,我们可以决定程序需要哪些管道及它们的执行顺序,因此用.NET Core开发出来的程序运行效率更高。
(4)ASP.NET Core程序内置了简单且高效的Web服务器—Kestrel。Kestrel被嵌入ASP.NET Core程序中运行,因此整个ASP.NET Core程序其实就是一个控制台程序。Kestrel可被配置上安全、HTTPS、限流、压缩、缓存等功能,从而成为直接面向终端用户的Web服务器,这样网站运行不依赖于IIS;也可以将其配置成轻量级的Web服务器,而安全、HTTPS、限流、压缩、缓存等功能则由部署在它前面的IIS、Nginx等反向代理服务器完成。
(5).NET Core更符合如今的软件设计思想。由于.NET Core是重新开发的,因此它可以更好地实现如今的编程理念,比如依赖注入、单元测试等。
虽然.NET Core是从头开发的,但.NET Core更多是对底层的调整,而对于开发人员使用的API,微软则尽力保证.NET Core和.NET Framework的一致性,也就是开发人员在.NET Framework中学到的绝大部分技术都可以迁移到.NET Core中,因此不会浪费开发人员在“.NET Framework时代”的技术投资。

NET Core是.NET Framework的升级版吗相关推荐

  1. 登录注册的小项目对比.Net Core与 .Net Framework的一些区别

    一.需求: 1.功能只有登录.注册. 二.架构: 1.分别为 UserSys.IServices:主要有实体和对实体的配置,还有对实体的操作接口 UserSys.Services :主要是对自ISer ...

  2. .NET Core 和 .NET Framework 启动可执行文件的差别

    在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...

  3. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  4. .NET Core 和 .NET Framework 之间的关系

    引用一段描述:Understanding the relationship between .NET Core and the .NET Framework. .NET Core and the .N ...

  5. 使用ASP.NET Core和Entity Framework Core实现Angular 7 SPA CRUD

    目录 Angular 7 Angular Core变化 Angular CLI更改 升级到Angular 7 添加新项目 创建新项目 使用Angular的前端设计和实现 添加模型和配置文件 添加Boo ...

  6. asp向不同的用户发送信息_.Net Core 和 .Net Framework的不同

    起因 近期因为公司业务的关系,开始使用.net生态环境,因此对.Net Core和 .Net Framework进行了一些研究. 历史 .Net Framework 历史要比 .Net Core 久一 ...

  7. .NET Core,.NET Framework和Xamarin有什么区别?

    本文翻译自:What's the difference between .NET Core, .NET Framework, and Xamarin? Microsoft now has .NET C ...

  8. dotnet core 和 dotnet Framework 启动可执行文件的差别

    在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...

  9. ASP .NET Core MVC Entity Framework 旧书交易网站

    代码在GitHub仓库:zhang0peter/Old-Book-Shop-System: Old Book Shop System ASP .Net Core MVC MySQL e-commerc ...

最新文章

  1. 牛津大学计算机系主任:人工智能立法重在抓机遇、防危害
  2. linux tomcat 配置启动命令,# linux 之 配置tomcat开机自启动(systemctl)
  3. 深入mysql慢查询设置的详解
  4. 模板(Template)
  5. xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
  6. 软件欺诈的骗局揭露:“替罪羊”究竟是如何构建的?
  7. java读取配置文件和获得项目根目录
  8. 前端组件库大合集-必备收藏
  9. 类似print shopmail可变数据生成,排版、拼版实现
  10. usb无线网卡断线后找不到网络
  11. 非 Java、C、Python,我使用的第一门计算机语言是它!
  12. 解决 Navicat 无法导入带外键的json 亲测有效!
  13. 如何编写Python爬虫
  14. Vue进阶(幺柒零):前端用户体验提升(四)应用 rem/em 实现字体自适应
  15. inet aton在java_地址转换函数:inet_aton inet_ntoa inet_addr和inet_pton inet_ntop
  16. 21世纪的中国人能否看懂这个大清帝国时代的法国人(2)
  17. 运算器和控制器在计算机的作用,运算器和控制器功能作用(修改版).ppt
  18. 2022李宏毅机器学习hw1--COVID-19 Cases Prediction
  19. 如何添加PMI芯片下的CHG_LED功能
  20. Mac登录不上自己的QQ账号,别人的账号却是可以正常登录--解决方法

热门文章

  1. GPU大百科全书 最终章:33毫秒的咏叹调
  2. 三件事看优酷关于视频网站版权的问题
  3. 下一代防火墙是什么 下一代防火墙产品有哪些
  4. 057_Skeleton骨架屏
  5. 开关电源元器件的选择
  6. 推荐系统学习(一)——推荐引擎初探
  7. 1073 多选题常见计分法 (20 分)(注意测试点4)
  8. mysql groupy by对多个字段进行分组
  9. 根据美光内存颗粒上的编码查询对应型号
  10. 对字符串 “ABC” 所有子集的列举