Net Core学习笔记

时间:2021-01-21 20:06:16

Net Core

官网:https://dotnet.github.io/

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 是一个跨平台的高性能开源框架。具有如下优点:

ASP.NET Core 完全作为 NuGet 包的一部分提供。 借助 NuGet 包,可以将应用优化为只包含必需的依赖项。 较小的应用图面区域的优势包括:提升安全性、减少维护和提高性能。

Net Core 与 Net Framework

NetCore是一个开源的模块化的Framework,不管是Web或移动设备都在同一个Framework下运行。

而且NetCore也可以在不同的操作系统上运行,包括Windows、Linux、MACOS。实现了跨平台。

NetCore在发布程序时不用事先安装NetFramework而是通过Nuget下载。避免下载安装NetFramework

Net Core学习笔记

Net Core学习笔记

如上图所示,NetCore和NetFramework都是Net Standard Library的实现,一种是跨平台,一种是Windows下特有

Net Standard Library是跨操作系统的关键所在,定义了一组接口,每个操作系统都有各自的实现。

Net Core通过nuget可以动态下载当前操作系统的实现,从而实现跨操作系统。

Net Core依赖于Nuget,允许本地application在部署时动态下载,比Net Framework更简单快速轻便

Net Core构成体系

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新出的特性。

占位符