.NET Core 几个重要组件详细篇

.NET Core到底是什么?为什么会开源

小型的 高效的 可以通过文件复制直接部署的跨平台框架

1..NET core 自身开源 ,鼓励更多.NET项目也开源

2.跨平台

3.性能 高效 .NET FW更加优秀,也比其他同级框架更高效

 

 拥抱开源 支持开源

.NET基金会----》独立的组织 用来支持.NET社区和开源 用来扩宽.NET生态

2014年 由微软牵头组建 创始人6个 都不是微软员工

2019年 .NET基金会改选 微软员工1名 MicMVP 亚马逊 谷歌 三星

.NET Core的源码 .NET Core周边开源项目都属于该基金会

 

.NET Core的几个重要组件Core CLR CoreFX Cli Rolsyn

Core CLR .NET Core 的公共语言运行时 由C++编写 是由.NET FW CLre  发展而来  结构基本一致、

第一职责就是执行.NET 程序  ----》解析为中间语言   

(中间代码IL  不依赖平台 不同平台运行 可以翻译成目标平台的机器码  生成元数据(l类型信息  GC信息 异常信息) 之后 用 Class Load(类型加载器)加载到内存种 用JIT即时编译器)

CLR 可以保证类型安全 提供了很多托管对象

CLR也提供了异常处理机制  传统的机制使用函数返回值通知和处理错误。

CLR提供的线程机制 CLR对原生的线程以及同步对象进行包装 ,使用相同的方式 在不同平台进行不同平台多线程处理

CLR 的 内存管理 垃圾回收GC    GC只会自动销毁释放CLR托管的对象  非托管对象(文件句柄  非托管资源都使用了托管代码包装 进而可以自动释放 该释放并不是GC而是 通过代码来实现 )

不同平台有不同平台的CLR  为了提供标准  ===》.NET Standard 框架类库种划分了一部分基础功能  被不同的CLR实现 .NET标准版本越高 要求支持的功能越多 例如

.NET FW 4.6.1和.NET Core 2.0 都支持.NET Standard 2.0

 

Core FX .NET Core基础类库 完全由C#编写 (库函数项目)Core FX====Libraries

基础类库;减少.NET开发人员的工作量 可以让不同模块之间数据交互更加容易

一句话  如果两个类库使用不同的时间类型 内置类型越丰富 各个模块共同使用的类型就越多  

Core FX 大多由.NET FW BCL移植而来

 Core CLI

CLI 的Github仓库在SDK

随着SDK安装一起安装SDK (安装VS 会自带)与 安装运行时时候安装的SDK  不一样 功能不一样 CLR运行时的CLR 只有执行运行应用的功能 

如何使用CLI 打开CMD 或者 Power Shell  dotnet为驱动命令  几个操作版本的简单命令

查看 CLI版本  dotnet --info

查看 当前最新.NET版本  dotnet --version.

切换.NET版本 指定  global.json --sdk-version xxx版本号 指定的版本 只能在当前或者子目录下可用 如果该目录没有global.json 会向上寻找   命令: dotnet new global.json --sdk-version 3.1.200 (该版本号必须与dotnet info 一致)

.NET Core 跨平台 我们就应该有点跨平台开发的样子 如果我们用Linux系统进行开发 Mac下开发 我们怎么创建项目呢? 我们应该熟练掌握CLI

创建项目的 几个命令  驱动命令 dotnet  new  模板 dotnet new <TEMPLATE>[-lang|--language] [-n|--name] [-o |--output] [Template options] [--foce] [-i | --install] [-u|--uninstall] [--update-apply] [--update-check]

[-lang|--language]  语言

 [-n|--name]  项目名称 若不指定 以当前目录名为项目名称

 [-o |--output]  把创建的项目放在哪个文件下 若不指定 会在当前目录创建

[Template options]  模板选项 比如WEB HTTP HTTPS

 [--foce]  可以覆盖当前文件

 [-i | --install] 安装一些模板  

[-u|--uninstall]  删除一些模板

 [--update-apply]  更行模板 

常用的 list 列表 type 类型

例如  dotnet new -l --type project  等于  dotnet --list --type projetc

下来使用命令创建一个 项目 

 dotnet new console   --name Helloworld 创建了一个 控制台

创建解决方案 dotnet new sln

dotnet new sln -o Demo01 

在Demo01下创建 项目

  dotnet new classlib -o Demo.Main 此时你会发现 你的解决方案中已有该项目了 但是 此时该解决方案 和该项目并没有联系  你可以通过命令 dotnet sln --list 提示并没关联的

如何建立联系引用 :dotnet  sln add Demo.Core 可以添加多个  

查看引用 dotnet list  .\Demo01\ reference

删除引用 dotnet remove .\Demo01\ reference .\Demo.Main\

这样就解决了 快速打开该项目 code Demo01  指定Demo01项目在 Vscode中打开啦

添加依赖包

dotnet add  .\Demo.Main\ package 包名

查看引用了哪些包 dotnet list .\Demo.Main\ package

移除包  dotnet remove .\Demo.Main\  package 包名

项目常见构建命令 dotnet build  

dotnet build [<PROJECT>|<SOLUTION>] [-o|--output] [-f| --framework] [-c|--configuration] [-v|--verbosity]

[<PROJECT>|<SOLUTION>]  :项目名称 或者解决方案

[-o|--output]  构建后的输出目录

 [-f| --framework]  指定以哪个框架目标生成 

[-c|--configuration]  指定 Debug/Realse 默认Debug

[-r |--runtime]  指定目标操作系统   运行在哪个操作系统   RID=[OS].[Version]-[arch]  [osx.10.11-x64] 不传默认当前系统

[--on-incremental] 全量/增量构建 标识 将代码全部重新构建/或者新增构建  不传 默认增量

[--no-dependencies]  忽略引用项目的build 不想生成依赖的某个项目

[-v|--verbosity]  输出日志  非常详细 d  不想看 q  默认最少

项目发布命令 如果直接使用发布 会默认构建并发布到指定目录  dotnet publish 

dotnet  publish [<PROJECT>|<SOLUTION>] [-o|--output] [-f| --framework] [-c|--configuration] [-v|--verbosity][--no-dependencies][--on-incremental]

独立发布 自带运行时 正对系统进行发布 文件大 

依赖发布 跨平台 不带运行时

 

posted @ 2021-10-05 18:56  三五八团楚云飞  阅读(625)  评论(0)    收藏  举报