.Net core 3.1 LTS长支持版本 2022 12月 .net 5 目前LTS版本还要等版本
.NET Core 到底是什么?
小型的、高效的、可以通过文件复制直接部署的跨平台框架。
为什么要用.net core? 也就是优势?
1: .net 基金会和社区 来管理 .net core 并决定采取 开源 策略 使用 MIT 协议 (别小看这个协议 开源协议很多 这个很强大 自由性极高 下方有几个开源协议对比)
2:跨平台 跨架构 支持命令行 部署灵活 兼容性强 linux 这么火 这么给力 不跨平台不行噻
3:精简化 比起.net fw 精简化 需要什么 我在去添加什么 .net fw 不管你用不用 都一大套 给到你 举例:session fw 直接
帮你给搞好了 直接用 ,.net core 你需要自己添加。
4:性能高 比.net fw 更加优秀 也比其它同级开源框架高效 不是精简了就性能高 是因为 有内置 kestrel
.NET Core 核心到底是什么?
重要组件:CoreCLR/CoreFX/CLI/Roslyn
CoreCLR: 公共语音运行时 底层其实是C++
职责
1. 执行.net程序 中间代码IL解析 什么方法 类型 生成元数据(类型信息、GC信息、异常信息)
.net 程序(IL中间代码不依赖与平台)同一个.net程序 可以在不同平台执行
而 原生程序(包含特定硬件架构的机器码,调用操作系统的函数) 、Native 需要在特定平台执行
2.中间代码编译 中间代码加载到内存 Class Loader 然后转换到机器码 也就是JIT 即时编译器 根据操作系统等等 选择最适合的
3.类型安全 保证对象类型一定正确
c语言 int*指针 - void*指针 在往后传 后面就不知道是int了
c# string - object GetType方法就可以知道真实类型 是因为 CLR会对每一个对象( 托管对象)都会保存 类型信息
4.异常处理 try-catch
5.线程管理 (托管线程,GC) 充分利用资源
托管代码用相同方式在不同平台进行多线程的处理
6.GC 垃圾回收机制 对无效的对象 销毁 对内存的整理 范围是针对于 托管代码
对于非托管资源,还是需要开发手动释放
CoreFX: .net 5 中叫Libraries 基础类型 c#编写的 库函数 比如 datetime 类型 thread 线程类
大多是FW的BCL基础类型 进行兼容处理过迁移过来的 关键字 partial + 条件编译
分开:公用 特定平台 避免了适配器模式在源代码中的应用 提升了效率
1.减少开发的工作量 .让不同模块的交互更加容易
比如c语音中 俩个类库:不同时间类型 c#直接用datetime 就行了
2.NET Standard/. NET 标准 ==最基础的功能
.NET FW 和 .NETCore 有对应的标准版本 也就是迁移匹配度
CLI
Common Language Infrastructure =通用中间架构 为了跨平台、跨语言 c#\vb.net\F#
一种技术标准 == IL 比如int都是=4个字节 不需要关注平台差异
基础类型、指令种类、模块/类/方法的结构,二进制的文件格式
Command Line Interface=命令行接口
以前一些windows的东西 不支持 linux
VS VScode都是通过.NET Core CLI 工具 创建项目等等
Roslyn 编译平台,代码分析
vs2017 开始 内置了
开源协议:GPL\Apache\BSD\MIT
协议:目的是为了保护和尊重作者的知识产权,即便是开源,也不说明源代码可以随意使用!!
GPL(极端思想) 所有软件都开源 使用这个协议代码用或者改(函数,衍生代码)都必须开源 传染性极强
国内比较喜欢白嫖,所以不采用
LGPL 在GPL 基础上 可以用 不能改 一旦改了 就必须开源
Apache (注明信息,作者,修改发布说明) 不要求用了改了就开源 相比宽松许多
BSD\MIT 最宽松的协议,自由的使用,自由的修改,自由的发布
BSD额外有一个规定:如果你对BSD协议下的软件的源码进行了修改再发布,那么你不能借用该项目原作者的名义进行宣传。为什么 怕用大厂的东西 然后 项目很烂 抹黑大厂
所以 .net core 采用mit 协议 更好的促进了 .net 生态 为开源打好了基础!