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

如上图所示,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新出的特性。

占位符

Net Core学习笔记的更多相关文章

  1. .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]

    原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...

  2. .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]

    原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...

  3. .NET CORE学习笔记系列(2)——依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在上篇中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的 ...

  4. .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]

    原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...

  5. .NET CORE学习笔记系列(2)——依赖注入【3】依赖注入模式

    原文:https://www.cnblogs.com/artech/p/net-core-di-03.html IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流 ...

  6. .NET CORE学习笔记系列(2)——依赖注入【2】基于IoC的设计模式

    原文:https://www.cnblogs.com/artech/p/net-core-di-02.html 正如我们在<控制反转>提到过的,很多人将IoC理解为一种“面向对象的设计模式 ...

  7. .NET CORE学习笔记系列(2)——依赖注入【1】控制反转IOC

    原文:https://www.cnblogs.com/artech/p/net-core-di-01.html 一.流程控制的反转 IoC的全名Inverse of Control,翻译成中文就是“控 ...

  8. .NET Core学习笔记(7)——Exception最佳实践

    1.为什么不要给每个方法都写try catch 为每个方法都编写try catch是错误的做法,理由如下: a.重复嵌套的try catch是无用的,多余的. 这一点非常容易理解,下面的示例代码中,O ...

  9. .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇

    1.什么是服务注册中心? 在学习服务注册与发现时,我们要先搞明白到底什么是服务注册与发现. 在这里我举一个生活中非常普遍的例子——网购来简单说明,网购在我们日常生活中已经是非常普遍了,其实网购中的(商 ...

  10. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

随机推荐

  1. yii 使用小技巧

    ​1.db组件 'schemaCachingDuration'=>3600, 为什么不起做用? 需要开缓存 2.如何在页面下边显示sql的查询时间,在log组件的routes中加入 array( ...

  2. 调整home和根分区大小

    目标:将VolGroup-lv_home缩小到100G,并将剩余的空间添加给VolGroup-lv_root ============================================= ...

  3. UVa 1331 - Minimax Triangulation(区间DP + 计算几何)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. luogu P1522 Cow Tours

    嘟嘟嘟 题面挺绕的,“翻译”一下: 1.牧区是一个点,牧场是所有直接相连的点构成的联通块. 2.两个牧区之间的距离是这两个距离之间的最短路,只有直接相连的两个牧区之间的距离是欧几里得距离. 3.牧场的 ...

  5. php 中输出字符串时怎么换行?

    <?php //php 不同系统的换行 //不同系统之间换行的实现是不一样的 //linux 与unix中用 /n //MAC 用 /r //window 为了体现与linux不同 则是 /r/ ...

  6. 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案

    在做项目中,需要从同事电脑中把Maven项目copy过来,但是copy的过程中只copy了代码,setting.xml文件和pom.xml,使用eclipse把项目导入,有红色的感叹号提示,由于我没有 ...

  7. 为什么 window.location.search 为空?

    1,什么是window.location?示例 URL:http://b.a.com:88/index.php?name=kang&when=2011#first 属性 含义 值 protoc ...

  8. sharePoint中简单的父页面跳转子页面代码!

    1,SharePoint中挺简单的一个父页面跳转到子页面的Js代码!常常用到,每次都到以前的项目中去找代码,挺麻烦! (1)父页面代码. function imgAddParentclick() { ...

  9. Python 学习笔记(九)Python元组和字典(三)

    字典常用方法 copy() 返回一个字典的浅复制 示例:浅拷贝d.copy() 深拷贝引入import copy   copy.deepcopy() >>> help(dict.co ...

  10. CentOS7 yum命令

    1.yum 清理缓存 [hado@localhost /]# yum clean all [hado@localhost /]# rm -rf /var/cache/yum/*