ASP.NET vNext or .NET vNext?

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:[email protected]

时间: 2024-08-06 03:41:36

ASP.NET vNext or .NET vNext?的相关文章

Visual Studio 2015 开发 ASP.NET 5 有何变化?(转)

出处:http://www.cnblogs.com/xishuai/p/visual-studio-2015-preview-asp-net-5-change.html 本篇博文目录: ASP.NET 5 模版 ASP.NET 5 目录结构 前端管理工具 无编译开发 Microsoft Git Provider 智能感知和错误信息 Smart Unit Testing 等待发现... Visual Studio 2015 Preview 版本部分说明: ASP.NET 5 Preview run

ASP.NET Web API是什么?

[翻译]ASP.NET Web API是什么? 说明:随微 软ASP.NET MVC 4一起发布的还有一个框架,叫做ASP.NET Web API.目前国内关注这项技术的人似乎还很少,这方面的文章也不多见.开发Web应用程序也许可以只用MVC这样的技术,而不用这项Web API技术,但如果用了,会给你的应用程序带来极大的好处.为此,本人转载并翻译了以下这篇文章,后面还会陆续翻译该项技术的一些官方教程.大家一起学 习,共同提高. Microsoft ASP.NET: What's This New

web系统开发为什么用asp.net MVC,为什么不用?

向高手咨询下,现在asp.net MVC很流行,但我好像提不起兴趣.企业级Web应用,使用纯HTML+jquery交互+Http Handler(或WebAPI),不是挺好的吗?有很多优点:1.Http Handler虽然是10年时的技术,再10年也不会过时,asp.net mvc每年一个版本2.后端想换其他语言很方便3.代码清晰简洁,不会感觉很碎4.纯html下载快(gzip压缩),而View层即使模板引擎再好也会耗服务端CPU 个人更认同客户端和服务端分开,如果要做移动Web应用也很方便打包

用例子看ASP.NET Core Identity是什么?

原文:用例子看ASP.NET Core Identity是什么? 目录 前言 基于声明的认证(Claims-based Authentication) Claim 在ASP.NET Core Identity中是如何实现的 类ClaimsPrincipal 考察另外一个重要的类ClaimsIdentity 在ASP.NET Core Identity中一同运行 总结 @ 前言 有三个重要的类Claim, ClaimsIdentity, ClaimsPrincipal,我们以一个持有合法证件的学生

你真的了解ASP.NET Core 部署模型吗?

原文:你真的了解ASP.NET Core 部署模型吗? ----------------------------   以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论-------------------------- 相比ASP.NET,ASP.NET Core 2.1出现了3个新的组件:ASP.NET Core Module.Kestrel.dotnet.exe, 后面我们会理清楚这三个组件的作用和组件之间的交互原理. ASP.NET Core 设计的初

【翻译】ASP.NET Web API是什么?

参考页面: http://www.yuanjiaocheng.net/entity/linq-to-entities-projection.html http://www.yuanjiaocheng.net/entity/dbset-class.html http://www.yuanjiaocheng.net/entity/dbentityentry-class.html http://www.yuanjiaocheng.net/entity/change-tracking.html http

看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?

转载自博客园:http://farb.cnblogs.com/ 今天无意中看到stackoverflow上一个很好的问答,个人觉得很有价值,所以翻译过来和大家共享!希望大家能相互交流. 在ASP.NET MVC中何时使用异步控制器(Async Controllers)? 在ASP.NET MVC中使用异步操作的时候,我有这么几个关注点.异步操作何时提高我应用的性能,什么时候没改善? 在ASP.NET MVC中到处使用异步操作真的好吗? 对于可等待的(awaitable)方法: 当查询数据库时(通

不安全的直接对象引用:你的 ASP.NET 应用数据是否安全?

介绍 作为一个在X94的航空工程师,你的老板要求你从2号楼的工程图中检索出一个特定的专利.不幸的是,进入大楼需要你出示你具有进入大楼的资格的证明,然后你迅速地以徽章的形式出示给了保安.到了十三楼,进入建筑师工程师图纸库要求通过他们的生物鉴定系统来验证你是你声称的那个人.最后在你的目的地,你提供给库管理员一串对你毫无意义的字母数字代码,但是在合适的人手上,它可以转换成哪里可以找的你需要的工程图的真实索引. 在上面的比喻中,我们可以很容易地确定适当的安全措施来保护敏感数据的访问.除了个人访问所需验证

谈自由,ASP.NET Core才是未来?

首先我要说一下自己对自由的理解: 自由是我可以选择不干什么,但我要保留我可以干什么的可能性. 比如说我现在只有一个码农的角色,但我仍然要保留可以扮演其他角色的可能, 比如成为一个作者,当我写下文章的时候已经是了,所以是知名作者(这就是努力的意义啦), 又比如我想成为一个好的架构师和好的管理者,至少在中下层,我认为这两者是不冲突的,因为有些架构的技术思维可以运用于团队管理,有时候相辅相成,所以也想写一篇架构即管理的文章, 当然自由永远是相对的,这就像宇宙浩瀚无边际一样,当你体会过迷失在 “世界很大