你必须要知道的.NET core

.NET CORE 3.1(LTS 2022 12)==.NET 5 Prv

.NET CORE 跨平台 开源 性能(MIT真正自由的开源协议)

1.关于开源

.NET传统开发人员不关注开源

软件的许可协议==开源协议(开源能让你感受到时代变迁的巨大 )Mic2000:开源是对知识产权的破坏,对软件行业的伤害 ;MIC2016 历史证明 软件不开源是活不下去的

.NET的开源 与.NET基金会(2014成立由微软牵头)联系着千丝万缕 ,其中支持着.NET开源社区(拓宽加强 .NET生态系统).NET CORE源代码 都是该基金会的资产 该基金会的开源项目都使用的是MIT开源协议

开源协议的种类:GPL MIT Apche BSD开源协议主要限制了软件的开源性和可移植性

GPL:核心思想就是 想让世界上所有软件都开源分享 ,使用了GPL协议的源代码 无论是引用了库 修改 衍生 都必须准寻GPL协议,必须免费 

LGPL:相对于GPL变化:商业软件如果只是引用了GPL协仪下的库 可以不开源,但如果修改了 就必须遵循GPL;

Apche:鼓励开源软件的使用者尊重软件的开源者  使用Apche 必须注明作者信息,

MIT:保留原作者信息

BSD:保留原作者信息  如果修改源码:不能借用原作者的名义进行宣传;与Apche 截然相反:(小公司使用大公司的热点) 

2.DotNetCore的核心组件

1.CoreCLR

     CoreCLR(公共语言运行时) .NETcore中最核心的组件:由C++编写,由.NETFreamrework衍生而来

     1.1CLR的职责

             1.1.1中间代码解析:

     CLR的第一职责就是执行.NET程序:

        .NET程序与 原生程序(Native) 

 

 

 

          .NET程序:.NET程序包含了中间语言IL,IL不依赖平台。所以同一个.NET程序 可以在不同平台上运行,CLR在不同平台上解析IL找到 各种信息找到 IL定义的 模块 类型 成员  方法 ....然后翻译为目标平台的机器码,在生成元数据 支持各种.NET机制(反射 GC 异常信息 ....)     
      1.1.2 JIT 中间代码的编译(即时编译器)IL---.>机器码 

           .NET的IL不能直接被目标平台直接翻译为机器码 必须借助CLR翻译为机器码   ,编译IL后加载到内存中 ;

            JIT 编译时 还会识别目标平台 编译出最适合该平台的运行的汇编代码;JIT是IL的编译器

          原生程序:包含了特定硬件架构的机器码 调用系统的API 只能运行在特点平台上
      1.1.3类型安全

        包装类型在传输中一定正确 C语言中 int* ---》void*  传递中类型不安全

        .NET中 string类型 --》Object ,通过GetType可以获取原类型信息 ,如果在转换时不合法 就会抛出异常:为了实现类型安全 CLR会在每个引用类型中保存类型信息 ,在转换时判断转换是否合法 而这些用CLR管理的对象 我们称为 托管对象

      1.1.4 异常处理:

          try cath捕捉,以及操作系统处理

      1.1.5 线程管理: CLR对原生的线程 进行包装,CLR管理的线程 称为 托管线程 配合GC进行工作

        

      1.1.5 GC: GC可以对CLR管理的对象进行自动回收的

 

  2.CoreFX=====基础类库 由C#编写

  大部分类库都是由.NETFramework 迁移而来 

    CoreFX实现跨平台的方法:Partial+编译条件(不同平台)

   为了支持不同平台Mic推出了 .NET Standard/.NET 标准===最基础的.NET基础功能

    

 

 

 

  3.CLI

         3.1.1 CLI Common Language Infrastructure  通用语言架构架构(中间语言)

             通用中间语言 简而言之就是 IL的标准 

     规定了基础类型,指令种类,模块/类/方法的结构 二进制文件格式等 比如 规定了Int类型就是4个字节 

    3.1.2 CLI Command Line Inteface==命令行接口  .NET CORE 2.0完成统一

    例如 DotNet Run

  4.Roslyn

    .NET 高级语言的编译平台 提供代码编译,代码分析。具有高度的开放性 ,可以通过调用API动态编译C#代码 (C#代码写在 txt中调用API直接编译)VS2017之后 编译器继承了Roslyn进行动态编译 (写完代码就知道对不对)

 3..NET难道只是微软在家开发使用?

           客户端范围  U3D 支持C#

    Xamrain--移动端开发

   .NET的发展正在趋于离散化 此时.NET基金会===规范化==通用性,移植性==规范文本  ------>.NET Standard

   .NET Standard 不是程序====是纯文本的类型和函数声明类型信息 他规范这相同功能的类型和函数 在不同.NET开发框架中具有相同的形态

  

 

 

   4.NET Standard 和.NET Core的区别

     .NET CORE 类库完全可以引用 使用 .NET Standard中的类库

    4.1:.NET core 是可以执行托管代码的执行平台

    4.2:.NET Standard是许多.NET平台共享和迁移的标准  编译后不能直接执行

        .NET Standard的缺点 发生异常 表示 某些API 在该平台不支持

 

 5..NET CORE 和.NET Freamwork的性能比较

 

 

 

 

 

 

 

 

.NET CORE有明显的性能提升

posted @ 2021-09-01 14:51  三五八团楚云飞  阅读(266)  评论(0)    收藏  举报