.net core跨平台的实现
一、.net core的性能提升
- 采用模块化的思想,重写BCL
- BCL被分成两部分
- CoreFX
- 模块化,按需加载
- 与CLR紧密相关的,被整合进另一部分,随CoreCLR一同发布
- 主要包括基础类型,如Int、String等
- 不会被直接引用
- System.Private.CoreLib.dll
- CoreFX引用System.Runtime.dll,System.Runtime.dll中使用类型转移,定向到System.Private.CoreLib.dll,即垫片技术
- CoreFX
- BCL被分成两部分
- 重写CLR
- CoreCLR
- 分别为主流操作系统和处理器架构针对性的设计独立的一套CLR
- CoreCLR
- 垫片技术
- 借助垫片技术,.net framework编译的程序集可以在.net core环境中运行
- 编译时引用的基础程序集,在.net core环境中也有一套,但这些程序集没有具体实现,都是作为垫片用的,定向到.net core自己的程序集中
二、.net framework、.net core、Xamarin的整合
- 微软旗下存在三大分支,.net framework、.net core、Xamarin,各分支之间存在代码复用的问题,为了解决该问题,引出.net standard
- .net standard
- 是一套接口,需要三大分支的具体实现
- 建立在.net standard之上的代码,可以在三大分支之间复用
- .net standard是按照.net framework的API进行设计的,存在很多交集
- .net core是按照.net standard进行设计的
- .net standard整合三大分支的原理
- 编译时引用netstandard.dll,该程序集里面只有.net standard API的存根,没有具体实现
- 运行时,在各自分支的运行环境中,提供一个同名的netstandard.dll程序集,该程序集作为一个垫片,定向到各自分支的具体实现中,这样原本分支中的程序集就不需要改动
三、统一的.net 5
- 由于加入了一层抽象层,三大分支都引用.net standard,所以不再区分.net framework、.net core等