Net Core
Net Core Api:
https://docs.microsoft.com/en-us/dotnet/api/?view=netcore-1.1
https://docs.microsoft.com/en-us/aspnet/core/api/
简介
ASP.NET Core 是一个跨平台的高性能开源框架。具有如下优点:
- 生成 Web UI 和 Web API 的统一场景。
- 集成新式客户端框架和开发工作流。
- 基于环境的云就绪配置系统。
- 内置依赖项注入。
- 轻型的高性能模块化 HTTP 请求管道。
- 能够在 IIS、Nginx、Apache、Docker 上进行托管或在自己的进程中进行自托管。
- 定目标到 .NET Core 时,可以使用并行应用版本控制。
- 简化新式 Web 开发的工具。
- 能够在 Windows、macOS 和 Linux 进行生成和运行。
- 开放源代码和以社区为中心。
ASP.NET Core 完全作为 NuGet 包的一部分提供。 借助 NuGet 包,可以将应用优化为只包含必需的依赖项。 较小的应用图面区域的优势包括:提升安全性、减少维护和提高性能。
Net Core 与 Net Framework
NetCore是一个开源的模块化的Framework,不管是Web或移动设备都在同一个Framework下运行。
而且NetCore也可以在不同的操作系统上运行,包括Windows、Linux、MACOS。实现了跨平台。
NetCore在发布程序时不用事先安装NetFramework而是通过Nuget下载。避免下载安装NetFramework
如上图所示,NetCore和NetFramework都是Net Standard Library的实现,一种是跨平台,一种是Windows下特有
Net Standard Library是跨操作系统的关键所在,定义了一组接口,每个操作系统都有各自的实现。
Net Core通过nuget可以动态下载当前操作系统的实现,从而实现跨操作系统。
Net Core依赖于Nuget,允许本地application在部署时动态下载,比Net Framework更简单快速轻便
Net Core构成体系
Net Core的系统构成,最上层是应用层,用于UI开发。
CoreFX是公共库,实现了Net Standard Library。包括了常用的系统级操作。
Net Core包含两种运行时(Core CLR、Core RT),
CoreCLR是一种基于即时编译程序的运行时。使用跨平台开源的编译器RyuJIT,
Core RT是使用提前编译器(AOT)的运行时。既可以使用RyuJIT来实现AOT编程也可以使用其他编译器。
Roslyn编译器
用于将C#或VB代码编译为程序集(assembly),编译过程是一个管道时的处理过程一共包含4个步骤
1. Parser解析:根据语法对源代码进行解析
2. Declaration声明:为代码生成元数据,元数据是一个数据表的集合,描述了数据类型和成员
3. Bind绑定:将生成的IL代码与描述它的元数据绑定在一起,生成托管模块
4. Emit生成:将一个或多个托管模块合并生成程序集
RyuJIT编译器
RyuiJIT负责在程序运行中需要执行某一个方法,需要将已经编译好的IL转换成本机的机器码。
新一代的JIT编译器,第一次实现了AMD64的架构。
介绍
.Net Core是ASP.NET的一个重要的重新设计。
.Net Core是一个新的开源和跨平台框架,用于构建现代基于云的互联网连接的应用程序。
.Net Core应用程序可以在Net Core或完整的Net Framework上运行。
可以在Windows、Mac、Linux上跨平台开发和运行ASP.NET Core应用程序。在Github上开源
优点
- 生成WebUI和WebAPI的统一场景
- 集成新式客户端框架和开发工作流
- 基于环境的云就绪配置系统
- 内置依赖项注入
- 轻型的高性能模块化HTTP请求管道
- 能够在IIS、Nginx、Apache、Docker上进行托管或在自己的进程中自托管
- 定目标到NetCore时,可以使用并行应用版本控制
- 简化新式Web开发的工具
- 能够在Windows、MacOS、Linux进行生成和运行
- 开放源代码和更完善的开源社区
ASP.NET Core完全作为nuget的一部分,借助nuget包,可以将应用优化为只包含必须的依赖项。
使用ASP.NET Core MVC生成WebAPI和WebUI
- ASP.NET Core MVC提供生成Web API和Web应用所需的功能:
- MVC模式使WebAPI和Web应用可测试
- ASP.NET Core 新增Razor页面是基于页面的编程模型,可简化Web UI生成并提高工作小绿绿
- Razor标记提供了适用于Razor页面和MVC视图的高效语法
- 标记帮助程序使服务器代码可以在Razor文件中参与创建和呈现HTML元素
- 内置的多数据格式和内容协商支持使WebAPI可访问多种客户端,包括浏览器和移动设备
- 模型绑定自动将HTTP请求中的数据映射到操作方法参数
- 模型验证自动执行客户端和服务端验证
客户端开发
ASP.NET Core 与常用的客户端框架和库(包括:Angular、React、BootStrap)无缝集成。
面向Net Framework 的ASP.NET Core
ASP.NET Core由Net Standard库组成。面向Net Core有以下几个优势
- 跨平台
- 提高的性能
- 并行版本控制
- 新API
- 开源
使用命令创建Net Core
使用dotnet命令,可以创建Net Core项目
dotnet new : 直接创建一个 Hello World项目(控制台)
dotnet new -t:可以指定生成项目,Console,Web,Lib,xunittest(例如:dotnet new -t Web)
dotnet restore:还原项目依赖包
dotnet run:执行项目
dotnet ef : 需要添加 Microsoft.EntityFrameworkCore.Tools.DotNet 只能修改csproj文件
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
</ItemGroup>
dotnet ef -h:帮助说明
dotnet ef migrations add initial:执行迁移
dotnet ef database update:更新代码到数据库
应用启动
Startup类
Startup 提供了应用程序的入口,并且每个应用程序都存在,充当应用程序的启动点。NetCore会在主程序集中搜索名Startup类。
使用Hosting:Application可以配置键。如果类的命名符合Startup,则会加载它。多个同名类,会根据命名空间加载。
选择其中的一个,匹配项目的根命名空间优先,否则按照字母排列中的命名空间的第一个类。
Configure方法
Configure方法用于指定如何相应每一个HTTP请求。更加复杂的管道配置,可以封装 中间件,并扩展到IApplicationBuilder上。
方法必须接受一个IApplicationBuilder参数,可以指定一些额外的服务,IHostingEnvironment、ILoggerFactory。
这些服务会被注入进来
ConfigureServices方法
用来配置用于应用程序内的服务。 通过参数获取一个IServiceCollection实例并可选的返回IServiceProvider。
ConfigureServices需要在Configure方法之前被调用。因为MVC的某些功能需要从ConfigureServices中请求某些服务。
而这些服务需要在接入请求管道之前先被加入CongureServices中。
IServiceCollection中使用扩展方法来包装含有大量配置细节的ConfigureServices。
能够使用 EF、Identity、MVC。通过依赖注入可以将服务加入到服务容器中,使其在容器中可以使用。
在这里也可以使用默认的依赖注入
services.AddSingleton<ITodoRepository,TodoRepository>();
中间件
中间件是用于组成应用程序管道来处理请求和响应的组件。
管道内的每个组件都可以选择是否将请求交给下一个组件,并在管道中调用下一个组件之前和之后执行某些操作。
请求委托被用来建立请求管道,请求委托处理每一个HTTP请求。
通过IApplicationBuilder类型的Run、Map、Use扩展方法来配置,并在Setup类中传给Configure方法。
位于请求管道内的中间件组件负责调用管道中下一个组件,或适时短路调用链。
¥
NPM和Bower
参考文献:
npm和bower .net Core为何改变 .net core系列文章
如果我们引用jQuery或者Bootstrap,会提示让我们使用Bower,那么介绍一下Bower的概念
Npm和Bower两者都是包管理器,是.Net Core新出的特性。
占位符