.net core

 

     .NET Core 是.NET Framework的新一代版本,是微软开发的第一个官方版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台,也是微软在一开始发展时就开源的软件平台[1]  ,它经常也会拿来和现有的开源 .NET 平台 Mono 比较。

     由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。

  .NET Core 是由许多项目所组成:

除了基本的类库(Core FX) 之外,

也包含采用 RyuJIT 编译的运行平台 Core CLR、

编译器平台.NET Compiler Platform、

采用 AOT 编译技术运行最优化的包 Core RT (.NET Core Runtime),

以及跨平台的 MSIL 编译器 LLILC (LLVM-based MSIL Compiler) 等项目.

RyuJIT

RyuJIT 是微软发展的新式即地编译器 (Just-in-Time Compiler),用以替换现有的 .NET Framework 的 JIT 以及 JIT64 即地编译器,依据微软公布的测试报告,RyuJIT 的性能较前一代的 JIT 提升约 25%,并支持 SIMD(Single Instruction, Multiple Data) 的技术。RyuJIT 同时应用于 .NET Framework 4.6 以及 .NET Core[4]   。

Core CLR

Core CLR 移植 .NET Framework 的 CLR 的功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境。

Core RT

Core RT 是以AOT (Ahead-of-time) 编译方式为主的核心功能,在 .NET Core 内称为 Core RT,在 UWP 则是称为 .NET Native。
Core RT 会在建造时期 (非运行期) 在编译时将 MSIL 转换成平台本地的机器码,以获取较短的引导时间 (JIT 采用的是运行时期编译,使得引导时间拉长),以及内存用量减少的优点。Core RT 会在不同的平台使用不同的 AOT 技术:
  • Windows 上使用的是 .NET Native。
  • Mac OS 与 Linux 上使用的是 LLILC (同时支持 JIT 和 AOT)。

LLILC

LLILC (LLVM-based MSILCompiler,英文发音为 "lilac") 是 .NET Core 在非 Windows 平台的 MSIL 编译器[5]   ,基于 ECMA-335 (Common Language Infrastructure) 的标准将 MSIL 编译成原生码运行,适用于可运行 LLVM 的操作系统,例如 Mac OSX 与 Linux 操作系统。
LLILC 同时支持 JIT (内含 RyuJIT 的实现) 以及 AOT (未来将开始支持) 的编译方式。

Roslyn

.NET Compiler Platform (项目代码为 Roslyn) 是将 .NET 平台的编译架构标准化的平台,它可提供程序管理工具 (如集成开发环境) 相当多的情报,用以发展有助于编写程序与管理程序结构所需要的功能,例如类型信息、语法结构、参考链接、语义、编译器、自动化、错误回报等等功能,只要是遵循 CLI 标准的编程语言,都可以利用 .NET Compiler Platform 实现出编译器,让程序管理工具能实现如语法提示、语法自动完成、关键字高亮等可视化能力。
.NET Compiler Platform 可同时支持 .NET Framework 4.6 以上版本,.NET Core 也原生支持。
 
 
摘抄自百度百科。
 
 
 
 
  

mono 

Xamarin公司开发的跨平台。NET运行环境
Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。[1]   该项目的目标是创建一系列匹配ECMA标准(Ecma-334和Ecma-335)的.NET工具,包括C#编译器和通用语言架构。
  与微软的.NET Framework(共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台,例如:Playstation 3,Wii或XBox 360。[2]  
     Mono是一个由Novell公司(由Xamarin发起),并由Miguel de lcaza
领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的 编译器,一个CLR的运行时,和一组类库,并实现了 ADO NET和ASP NET。能够使得开发人员在Linux用C#开发程序。)主持的项目.该项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言(CL 即 Common Language)执行平台(Platform).与微软的.Net不同, Mono项目不仅可以运行于Windows系统内,还可以运行于Linux, FreeBSD, Unix, Mac OS X和Solaris。[3]  
Mono现由Novell持有双重许可, 这和Qt、Mozilla应用程序套件的情况相似.Mono的C #编译器及其相关工具发布于GNU General Public License (GPL)之下,其运行时库发布于GNU Lesser General Public License (LGPL)之下,其类库发布于MIT License之下.这些均是开源协议因此Mono是一个开源软件.如果你打算向Mono贡献你的源码,则你须签署一个版权分派给Novell以允许它将这些代码在其它协议下再申请许可,从而允许Novell保留其双重许可的能力来持有Mono的商业协议[1].
微软开发了一个称为共享源码公共语言基础(Shared Source Common Language Infrastructure, Shared Source CLI)的可用于FreeBSD, Windows, Mac OS X的.NET实现版本.微软的共享源码协议并不是开源软件协议,且可能对于社区来说也是不足够的(它明文禁止了对软件的商业用途).我们还可以见到另外一个.NET实现版本, Portable NET项目,该项目与Mono项目有着很多相同的目标.
Mono 虚拟机包含一个实时编译引擎,该引擎可用于如下处理器: x86, SPARC, PowerPC, ARM, S390 (32位模式和64位模式), x86-x64, IA64和64位模式的SPARC.该虚拟机可以将代码实时编译或者预先编译到原生代码.对于那些没有列出来的系统,则使用的是代码解释器.
 
  Miguel de Icaza在. NET的文档于2000年10月发布时就对. NET产生了兴趣.在查看字节码解释器后,他发现对于元数据(metadata)没有相应的说明文档.2001年2月, deIcaza在. NET邮件列表中索要到了那段缺失了的关于元数据文件格式的信息,并开始了采用编写一个C #编译器的工作,作为对的实践C #. 2001年4月ECMA公布了那段缺失的文件格式,而在GUADEC (2001年4月6日- 8月4日) deIcaza展示了他的编译器的一些特性(那个时候他的编译可以解释自身).
Ximian内部对如何创建能有效提升生产效率的工具进行了大量的讨论,他们的目标是通过这些创建出来的工具让使用者可以在更短时间内创建出更多的应用程序从而缩短开发周期和降低开发成本.经过可行性研究后,他们清楚地见到创建这样的一项技术是可行的,于是Ximian从其它的项目抽调人员并创建了的开发小组Mono.由于缺少人力来创建整个. NET替代产品,他们在2001年7月19日的O'Reilly大会创建了的开源项目Mono.
差不多三年后, Mono于2004年7月30日发布了1.0版本.
      类库为 应用程序开发提供一套广泛而有效的工具类。这些工具类本是采用C#编写的,但是由于.NET采用的 公共语言运行时,它们可以用于任何.NET语言。类库被按命名空间进行了结构化,并被放置于称为程序集的共享库中。在我们谈到.NET framework时,我们多数是指这个类库。
  公共语言基础(Common Language Infrastructure,CLI),又叫公共语言运行时(Common Language Runtime),已由Mono实现。该运行时用于执行已编译的.NET应用程序。公共语言基础已被ECMA定义为标准ECMA-335。要运行一个.NET应用程序,你必须使用相应的参数调用运行时。
在ECMA-335的第六章详细说明了 公共语言规范(Common Language Specification,CLS)并定义了提供给公共语言基础的接口,例如对于枚举类型的隐含表示类型的协定。 Mono的编译器负责生成符合公共语言规范的映射代码,即公共中间语言(Common Intermediate Language,CIL)。 Mono的运行时将运行这类代码。 ECMA标准先前还定义了一个符合公共语言规范的程序库作为应用框架。
  在原生的.NET/Mono应用程序中,所有代码都是托管的,也就是说,是受管于CLI式的 内存管理和线程安全管理的。其它的.NET或Mono应用程序可以通过使用System.InterOpServices库创建C#绑定来调用已存的非托管代码。很多移植到Mono的类库使用了CLI的这个特性,例如Gtk#。
  现有大量与Mono相关的用于扩展Mono的项目,这些项目允许开发者在他们的开发环境中使用Mono。这些项目包括:
Cocoa#,对原生Mac OS X工具包的一系列包装(Cocoa)。
Gecko#,一个对在Mozilla中使用的嵌入式布局引擎的绑定(Gecko).
Gtk#,对使用C的GTK+库的C#的外包。
Tao,一个图形及游戏库的绑定。
 
摘抄自百度百科
 
.NET Fremework
 
  Microsoft .NET Framework是用于Windows的新托管代码编程模型。它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。
 
 
再次开始谈.NET Core 

.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在GitHub上,由微软官方和社区共同支持。

它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于BCL的层面上看)。这是因为在当前版本中(1.0),.NET Core中的大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC, JIT, 部分类型)。

 
 

2.2 .NET Core的组成

 

  • .NET Runtime
    CoreCLR。如之前所说,CoreCLR与.NET Framework的CLR并没有什么区别,进程管理,GC,JIT(RyuJIT 编译器)这些部分也都是一样的,只是针对服务器系统做了相应优化。现在CLR和CoreCLR也在进行同步更新,只是可以肯定的是,CoreCLR才是.NET的未来,CLR将作为兼容手段而存在

  • Framework Libraries,
    CoreFX。包括集合类,文件系统处理类,XML处理类,异步Task类等

  • SDK Tools 和 Language Compilers (SDK工具和编译器)
    CLI工具和Roslyn编译器。可以通过.NET Core SDK(.NET Core开发工具包)获取。

  • dotnet’app host
    用来选取并执行对应运行时,提供组件载入原则和启动.NET Core应用程序。SDK也是通过相同程序启动。

    Tips:是不是想起了MSCorEE.dll这个垫片,它同样承载着Windows平台上为.NET应用程序选择CLR版本的工作

 摘抄自: .NET Core全面扫盲贴
 
 
 
 
 

 

转载于:https://www.cnblogs.com/Tpf386/p/6437371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值