.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]
独立发布 自带运行时 正对系统进行发布 文件大
依赖发布 跨平台 不带运行时

浙公网安备 33010602011771号