vNext之旅(1):从概念和基础开始
ASP.NET vNext or .NET vNext?
vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为ASP.NET只是其中的一种开发框架而已,其中真正核心重要的乃是底层的支撑层,至于底层还有些什么内容,下面会进行一次分析。
.NET Framework、Mono、.NET Core都是什么鬼?
相信有不少人对这一次vNext新诞生的名词抱有许多疑惑,它们到底是做什么的?负责什么内容?扮演者什么样的角色。
.NET Framework
这个我相信大家都不会感到陌生,做.NET平台相关的开发者都应该熟悉至少是了解其中的大概(虽然现在这样的人还是占少数),.NET Framework整个架构图非常大,但针对今天的主题细分为两大块:CLR(公共语言运行时)、FCL(框架类库)。
CLR是负责执行IL(中间语言)而FCL则是微软提供给开发者的快速开发类库,这些代码完全可以由开发者自己编写与我们平常写的代码本质上并没有多大的差异。
Mono
Mono与.NET Framework类似,是对于.NET Framework跨平台的移植,xamarin就是基于它的,也是风风火火。
.NET Core
今天的主角之一,.NET Fremework中的两大块CLR、FCL它也有,不过进行了更名与重构。
CLR被命名为:CoreCLR(.NET核心公共语言运行库)
FCL被命名为:CoreFX(.NET核心库)
在两大块面前大家先对号入座就好了。
CoreCLR
CoreCLR向外暴露了:Roslyn、LLILC(lilac)。
Roslyn
这个大家比较熟悉,它向C#、Visual Basic提供了丰富的代码分析API和编译器。一开始我以为C#、VB代码到二进制代码的编译完全由它来完成,后面才发现它的背后有一个默默付出的功臣:LLILC,而它最主要的作用则是代码分析编译的动作是转交给LLILC的。
LLILC
真正的编译工作者。官方以后将提供:JIT(Just in time运行时编译)、AOT(Ahead of time运行前编译)两种编译方式。不过目前只有JIT,而AOT目前是Universal Windows Platform(UWP)的特权,相信不久的将来我们会迎来全平台的AOT。
JIT方式的编译实现现在叫做:RyuJIT。
JIT编译架构
AOT编译架构
相比之前的特色
模块化
在此之前大伙能想象CLR、FCL可以根据设定的版本号自动进行获取吗?而.NET Core基于模块化这一特性实现了这一点,以后大伙不需要再提前安装.NET Framework对应的版本而可以直接使用到不同版本的特性。这对于正在运行的服务器安装新的.NET Framework或更新.NET Framework带来了一次完美的解决,以后在使用.NET平台下新特性时不需要再担心更新完成之后服务器是否需要重启,因为这一切都是模块化的可选择性加载的。
跨平台
vNext发布之初最大的特性就是可以在Linux、OSX等操作系统上运行了,这也是大家觉得最需要醉激动的。但个人只是觉得跨平台是.NET这次革命以来带来的一个成果、结果而已,并不让我觉得很不可思议。
当然发展了许多年的.NET如今跨平台并不是毫无成本的,如果想要跨平台就意味着现在存在的小、中大型项目几乎不可移植,具体的我们后面再看。
开放
这是特性是离我们最远却最有意义的一点(本质上说这不关平台的事,而是关乎于微软)。这意味着我们可以为 CoreCLR(CLR)、CoreFX(FCL)进行贡献以帮助.NET更加完善。
为什么说离我们最远?作者也有开源一些项目深知想要为某个开源项目贡献是一件多么不易的事情,而得到它人的贡献更是一件特别特别难的事情。所以大多数开发者都不会用到此特性。
为什么最有意义?这一点很难说清,需要时间去证明,如果微软能够营造一个不错的社区环境那么这一点以后一定会体现出来。
DNVM、DNX、DNU、KVM、KPM、KRE是些什么鬼?
我们先来看看每个缩写的全称和中文名称。
DNVM:.NET Version Manager(.NET版本管理)
由于要实现跨平台的目录,微软提供了DNVM功能,DNVM是ASP.NET最底层的内容,它是一组Powershell脚本,用于启动指定版本的ASP.NET运行环境,并且可以在同一台机器的同一时间点上通过使用Nuget工具来管理各种版本的ASP.NET运行环境(DNX),以及进行相应的升级操作。
之前我们提到模块化的特性时有说过现在我们不需要到处去找.NET Framework安装包去单独安装不同版本的.NET Framework了,而是由一个工具进行统一的管理(安装、卸载、升级等),可以把它理解成一个“软件管家”不过它目前只有一个软件:.NET Core(不同的版本、CPU架构)。以后在开放项目时如果用了.NET Core v2版本,那么我们需要在服务器上使用该工具安装.NET Core v2。(安装过程非常的快,每个不同的版本包含了完整的.NET Core中提及的内容)
DNX:.NET Execution Environment(.NET执行环境)
DNX是ASP.NET程序的运行环境,用于启动并运行ASP.NET程序。该运行环境包括了编译系统、SDK工具集、Native CLR宿主环境。可以使用DNVM管理各种版本的DNX,如dnvm list命令可以列出所有可用的DNX环境,而dnvm install 1.0.0-beta4则可以将指定版本的DNX安装到.dnx文件夹,你可以在%USERPROFILE%\.dnx\runtimes目录下找到已安装所有版本的DNX。不同的操作系统有不同的DNX版本。
dnx.exe:dnx.exe是用于启动自宿主环境(Self-Hosting)的命令行工具,在使用命令行代码进行自宿主环境启动程序时,dnx负责查找并调用CLR Native Host,dnx命令是整个运行环境的入口点,你可以使用dnx run来启动程序。
我们的代码(C#、VB)是由.NET Core来执行的而.NET Core是由DNX来执行的。
DNU:DNX Utility(.NET执行环境实用工具)
是一个命令行的包管理器,包含在DNX内,所以只要安装了DNX,就可以使用dnu命令,其可以用于恢复程序包、安装程序包、部署程序包等等,比如把project.json里自定义的程序集自动下载下来进行使用。
用过NuGet的应该都清楚我们一般在VisualStudio中进行package的还原,其实NuGet提供了NuGet.exe,微软应该考虑到了集成度才将NuGet.exe包含在了DNX当中,他的作用很简单,为项目进行package的还原。
开发环境还原好了再发布就可以为什么正式环境还需要它?
vNext一直强调的是云,我们一般在Windows下进行开发(拥有宇宙最强IDE),但线上环境其实是Linux这时候就需要根据不同的运行环境还原不同的package以便能正常运行。
KVM:K Version Manager(K版本管理)
KRE:K Runtime Enviroment(K运行环境)
KPM:K Package Manager(K包管理)
可以发现以D开头的3个东西跟K开头的三个东西名称上非常的类似,到这里你想的没错,微软的改名大队又出动了,在此之前微软将此项目命名为K项目,在此之后肯定要有个专业的名称,微软开发团队对一些内容进行了职责和名称划分。
架构图
这一节的内容部分引用自:理解ASP.NET 5运行时命令:DNVM, DNX, 和DNU,在此感谢张善友前辈为我们提前探好了路。
.NET Framework 4.6和.NET Core 5
上面描述过.NET Framework是我们现在用的.NET框架,.NET Core是新一代的.NET框架,那么他们两个的关系是什么?我们来看一张图。
可以发现
.NET Framework 4.6
支持WPF、Windows Forms、ASP.NET(4&5)
.NET Core 5
只支持ASP.NET 5、Universal Windows Apps(UWP)
这边有一个很有意思的事,Universal Windows Apps(UWP)微软平台(PC、平板、手机)大统一战略中最重要的一环使用的是.NET Core,不难发现.NET Core对于微软来说的重要性。也是微软了筹备了数年的成果。
写在最后
参考资料
http://www.cnblogs.com/shanyou/p/4589930.html
http://www.cnblogs.com/shanyou/p/3764070.html
http://www.cnblogs.com/dudu/p/4257106.html
http://www.cnblogs.com/dudu/p/aspnet5-xre-cross-platform-secret.html
http://www.cnblogs.com/dudu/p/4245809.html
http://www.cnblogs.com/dudu/p/dotnet-core-framework-mono.html
http://www.cnblogs.com/dudu/p/what-is-dotnet-core.html
http://www.cnblogs.com/shanyou/p/4295163.html
http://www.cnblogs.com/dudu/p/what-is-dotnet-core.html
http://dotnet.github.io/core/
https://docs.asp.net/en/latest/conceptual-overview/aspnet.html
https://docs.asp.net/en/latest/conceptual-overview/dotnetcore.html
https://docs.asp.net/en/latest/dnx/overview.html
https://github.com/dotnet/coreclr
https://github.com/dotnet/corefx
https://github.com/dotnet/core
http://dotnet.github.io/core/about/overview.html
http://www.dotnetfoundation.org/netcore
这里感谢:张善友和dudu,感谢他们之前为我们探好了路。
交流方式
QQ群:384413261(RabbitHub)
Email:majian159@live.com
转载于:https://www.cnblogs.com/ants/p/4952383.html
vNext之旅(1):从概念和基础开始相关推荐
- vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼
继上次"vNext之旅(1):从概念和基础开始"之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间. 起因 在用vNext造轮子--框 ...
- Python基础概念_2_基础概念
基础概念 3 基础概念 3.1 数字 计算机最初设计时就是为了做数据运算的,所以针对这个概念应该不会陌生.在Python的世界里数主要有三种类型: 整数.浮点数和复数,详见下例: a) 5 是一个整数 ...
- 安卓APP_ Fragment(1)—— Fragment概念、基础用法、动态变换、管理栈
摘自:安卓APP_ Fragment(1)-- Fragment概念.基础用法.动态变换.管理栈 作者:丶PURSUING 发布时间: 2021-04-15 23:32:31 网址:https://b ...
- 负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负 ...
- 太极图形课S1第06讲:光线追踪的概念与基础
序 总觉得,这个以后能用的上 视频 太极图形课S1第06讲:光线追踪的概念与基础_哔哩哔哩_bilibili 代码 GitHub - taichiCourse01/taichi_ray_tracing ...
- RabbitMQ核心概念及基础API应用
RabbitMQ核心概念及基础API应用 1 主流中间件介绍 衡量消息中间件的指标:服务性能,数据存储,集群架构. 1.ActiveMQ:Apache,支持JMS规范最完整的. 2.RocketMQ ...
- 计算机基础知识 基本概念,计算机基本概念与基础知识.ppt
计算机基本概念与基础知识 学什么? 上网.打字.聊天? 第1章 计算机基本概念与基础知识 1.1 概述 1.2 计算机数据表示 1.3 计算机系统 第一台电子计算机(ENIAC) 1.1.1 计算机的 ...
- 阿里云基本概念与基础架构(一)
阿里云基本概念与基础架构 文章目录 阿里云基本概念与基础架构 1.云的基本介绍 1.1.什么是云平台 1.2.云平台的分类 1.3.为什么使用云平台 2.阿里云基础架构 2.1.云平台有那些厂商 2. ...
- 从零学习Java之旅 Part1 基本概念部分
从零开始学Java之旅 Part1 基本概念部分 从零学习Java之旅 Part1 基本概念部分 Java学前了解知识 本人说明 Java语言版本 Java语言平台版本 Java语言特点 JDK和JR ...
- 平面设计的概念和基础
网页设计虽然在包含了传统平面设计的文字.图片外,增加了如动画.声音.视频等新的信息方式,但从设计角度但仍属平面设计的一种,了解平面设计的概念和基础是每一个合格网页设计师的必修科.只要掌握一些平面设计的 ...
最新文章
- 企业架构研究总结(2)——问题的由来和基本概念
- 调查了6万多名开发者后,我们发现了这些...
- 用gis打开tif格式_如何下载SHP矢量格式的等高线
- TCP 协议的三次握手、四次分手
- if嵌套while循环语句_Python学习笔记015--while循环嵌套
- linux怎么升级python2.7,linux升级python到2.7
- 《架构系列四:一键部署应用到Tomcat集群中》
- 素材 | 3D立体设定数据多彩数据统计图元素PSD模板
- java查询数据比Oracle少,java对ORACLE中的于NCHAR数据的处理,查询
- 一天一种设计模式之二-----备忘录模式
- 批量获取客户端时间偏差
- mysql8.0.11-1 修改密码报错
- 计算机操作系统(第3版)课后习题答案(完整版)
- php自动生成试卷,基于jQuery的试卷自动排版系统实现代码
- 运动目标检测发展概述
- 云计价i20快速入门技巧——“附加费”应用
- 机器人方队解说词_方队解说词3篇
- 数据可视化设计师必备的图表规范指南
- 安装SqlServer2000以及SP4补丁时的注意事项
- 数学建模之稳定性模型详解
热门文章
- render iview tab select的添加和input的添加
- innerHTMLinnerHTML与innerText的区别outerHTMLinnerHTML与html的区别
- phpstudy 上怎么运行 thinkPHP ?
- xcode环境变量设置(转载)
- 某公司ASP.NET应聘上机试题
- PHP网络版CRM客户管理系统
- elementui el-input输入数字为整数的验证
- 【spring boot】application.properties官方完整文档【参考使用】
- 2017商业科技市场预测:云计算改变行业的十大关键发展
- 陕西大数据产业建设总投资达500亿元