ASP.NET Core 阶段性总结
自从年前用 ASP.NET 5 磕磕绊绊重写了一个项目后 (2015.12),就没怎么关注 ASP.NET 5 相关内容了,为啥?因为实际应用问题太多,而且不是正式版本,变化实在太快,可能你今天了解的东西,明天就被否定了,但现在回过头看,不关注的话就会漏失一些有价值的东西,虽然看看新闻了解到了,但还应该去深入的思考下,并且经历微软开源一步一步走向成熟的过程,这对于我们来说,也是一个机遇。
这段时间,我觉得主要发生了两件事:
对我们影响最大的是 ASP.NET 5 重命名为 ASP.NET Core 1.0,我简单列举几个:
- 搜索资源不匹配,我应该是搜 ASP.NET vNext?还是 ASP.NET 5?还是 ASP.NET Core 1.0 呢?并且以前写的有关文章资料,都搜索不到了。
- 程序包名称变化,这个对已经用 ASP.NET 5 开发的项目影响最大,比如
Microsoft.AspNet.Mvc
变成了Microsoft.AspNetCore.Mvc.Core
,相关程序集名称都需要更改。 - 运行命令变更(包含运行时),主要是增加新的东西 CLI,比如
dnu restore
变成了dotnet restore
等等。 - ...
上面是对于我们开发者所造成的影响,其实对于微软来说,重命名所带来的额外工作也非常大,这也就造成了 ASP.NET Core 发布日期的推迟,就像新闻中所提到的:这是个很好的改变,但为什么来得这么迟呢?如果像 ASP.NET vNext 改名为 ASP.NET 5 那么迅速就好了。
除了 ASP.NET Core 1.0 重命名外,我觉得还有一个最大的变化,就是 dnx 到 cli 的改变,这部分内容需要深入探讨下,在探讨之前,大家可以先看下这篇博文:K & DN 的前世今生(微软开源命名变革)
- k -> dotnet -> dn(最终版)
- kpm -> dotnet -> nuget -> dotnpm -> dotnetpm -> dnpm(最终版)
- kvm -> dotnetsdk -> dotnvm -> dotnetvm -> dnvm(最终版)
- k and kvm -> dotnet -> 合并(否决)
- kre/xre -> dnx(未经讨论确定)
上面是很久之前 GitHub 上一个命名讨论的 Issue,现在回过头看,是不是很有意思呢,因为大家一开始探讨的命名就是现在微软的命名,微软实在做了太多无用功,cli 是从 dnx 变迁过来的,我们先了解下 dnx 是什么?
The DNX (a .NET Execution Environment) contains the code required to bootstrap and run an application, including the compilation system, SDK tools, and the native CLR hosts.
说白了,我觉得 dnx 就是 ASP.NET 5 应用程序的运行时(某段时间内),为什么这样说?我们先了解下 dnx 的历程,dnx 最初被命名为 xre,然后又被命名为 kre,需要注意的是,那时候还没有 CoreCLR,详见《魅力 .NET:从 Mono、.NET Core 说起》的文章最后,xre 中的代码并不是很完善,有很多的代码都是从 mono 借鉴过来的,包括运行时都是 mono,所以,看上面 dnx 的介绍,它其实就是一个运行时,并且因为 dnx 不是很完善,围绕它的命令也就改来改去。
后来微软开发了 CoreCLR,它是一个微软自己的运行时,GitHub 地址不再放在 aspnet 下,而是放在了 dotnet 下,但其实是 CoreCLR 并不是很完善,从开源地址贴出来后,就一直在开发的状态,并不能真正的拿来使用 (跨平台),所以 dnx 一直被 ASP.NET 5 使用着,但后来随着 CoreCLR 的逐步完善,微软就开始考虑抛弃 dnx 了,cli 也就诞生了。
需要注意的是,cli 并不是由 dnx 重命名来的,而是演化过来的,它们俩是两个完全不同的概念,另外,cli 也不是公共语言基础(Common Language Infrastructure)的简写,而是 .NET Core Command Line Interface,翻译过来就是 .NET Core 命令行接口。
CLI, This repo contains the .NET Core command-line (CLI) tools, used for building .NET Core apps and libraries through your development flow (compiling, NuGet package management, running, testing, ...).
This repo contains the source code for cross-platform .NET Core command line toolchain. It contains the implementation of each command, the native packages for various supported platforms as well as documentation.
上面和 dnx 的定义对比下,就会发现它们是完全不同的,那 cli 到底包含哪些内容,在上面已经有了详细的解释,.NET Core 命令行接口及其实现,它的作用就是在应用程序和运行时之间搭起一座沟通桥梁,命名形式以dotnet *
开始,我觉得 cli 是微软以后所有命令实现的一种规范,应该不会再出现杂七杂八的命令了。
最后,看一段 About .NET Core 的内容:
.NET Core is a cross-platform implementation of .NET that is primarily being driven by ASP.NET 5 workloads, but also by the need and desire to have a modern runtime that is modular and whose features and libraries can be cherry picked based on the application’s needs.
.NET Core consists of the CoreCLR runtime and the CoreFX framework libraries. A set of cross-platform tooling can be found in the .NET CLI. The Roslyn compiler and LLILC compiler are sibling projects that support .NET Core. These projects are active on GitHub. You can participate by creating issues or collaborate on development. The main goal of the project is to create a modular, performant and cross-platform execution environment for modern applications.
.NET Core 一开始是 ASP.NET 5 跨平台的一种实现,后来被逐步变化为 .NET 跨平台的核心运行时,.NET Core 包含 CoreCLR 和 CoreFX,一个 .NET CLI,Roslyn 和 LLILC 编译器,主要目标:modular(模块化)、performant(高性能)和 cross-platform execution environment(跨平台执行环境)。
关于高性能,可以看看最近的这篇新闻:《ASP.NET Core 每秒能处理 115 万个请求,是 ASP.NET 4.6 的 23 倍(5 万个请求)》,另外,ASP.NET Core 1.0 的应用示例:《ASP.NET Core 1.0 Hello World》
ASP.NET Core 阶段性总结的更多相关文章
- ASP.NET Core 之 Identity 入门(一)
前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...
- .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1
微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
随机推荐
- 【XSS】延长 XSS 生命期
XSS 的本质仍是一段脚本.和其他文档元素一样,页面关了一切都销毁.除非能将脚本蔓延到页面以外的地方,那样才能获得更长的生命力. 庆幸的是,从 DOM 诞生的那一天起,就已为我们准备了这个特殊的功能, ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...
- sonn_game网站开发01:写在最前面
之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...
- node中的cmd规范
你应该熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log('M ...
- JavaScript function函数种类
本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通函数:介绍普通函数的特性:同名覆盖.arguments对象.默认返回值等. 2. 匿名函数:介绍匿名函数的特性:变量匿名函数.无名称匿名函数. ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
- .net Elasticsearch 学习入门笔记
一. es安装相关1.elasticsearch安装 运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...