我眼中的.NET Core

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27825451/article/details/67640913

一、什么是.NET Core

       .NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在GitHub上,由微软官方和社区共同支持。它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于BCL的层面上看)。NET Core中的大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC, JIT, 部分类型)。

怎么理解呢,因为.NET framework是只能够运行在windows上面的,而.NET Core是可以跨平台的。

二、.NET Core的核心组成

.NET Core主要是由两部分组成

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

.NET  Core包含了两种不同的运行时,如下所示:

      (1)CoreCLR , 它跟.NET framework的运行时很像,将C#代码编译形成IL中间语言,等到运行的时候再转化为机器码

      (2)NativeRuntime ,它是直接将C#转化为 Native Code。

2、.NET Core SDK  ——它又由两部分组成

      (1)SDK,即Framework Libraries,即CoreFX。包括集合类,文件系统处理类,XML处理类,异步Task类等。

      (2)CLI ,即Command Line Interface,CLI指令工具是.NET Core“处理,创建,编译,运行”的主要工具,这到底是一个什么呢,因为.NT Core是跨平台的,而在Unix/Linux上面并没有想Visual Studio这样强大的编辑器,那怎么去创建项目,编译项目,运行项目呢,所以需要提供这样一个工具去完成这些操作。虽然Visual Studio Code编辑器是跨平台的,但是它仅仅是一个编辑器而已,像Notepad++,SublimeText等一样。(在2017年,微软推出了,Visual Studio for Mac,这就意味着在苹果系统可以通过编辑器去创建,编译,运行.NET Core项目了,就像我们在window平台上使用Visual Studio一样),CLI到底怎么用,请参见我的另一片文章.NET Core的CLI使用方法大全。


注意事项:(1)、.NET Core采用的是包化(Package)的管理形式,应用程序之需要获取需要的组件即可,不同于.NET framework的大包式管理形式

                  (2)、.NET Core只支持控制台、类库、ASP.NET Core三种类型的项目,不支持Forms,WPF程序。


三、.NET将来的发展格局

   

四、.NET Core和Java的比较理解

       由于.NET Core和Java都是跨平台开源的,那么两者之间其实有很多相似之处的,现在做一个简单的比较如下:

       (1)两者都是跨平台的,如果只需要使用程序,.NET Core则只需要安装.NET Runtime即可,而Java则只需要安装Jre(Java Runtime Enviroment)即可,但是如果需要开发程序,则还需要安装完整的JDK和.NET Core SDK,一般出于方便,我们会都安装上,由此可见.NET Core和Java的确是很相似的。

      (2).NET Core的源文件文.cs文件,使用dotnet build命令编译之后会生成一个.dll文件(注意:这个.dll文件并不是传统意义上的windows组件,我们可以通过dotnet run去运行这个.dll文件,所以我们即使创建了一个控制台项目,依然看不到.exe程序,因为EXE不是跨平台的)。

      (3)Java的源文件为.java,使用javac编译之后,会得到一个.clsss文件,然后通过java命令去运行这个.class文件。

总结:编译之后得到的.dll和.class文件是跨平台的,这才是跨平台的本质,我们说.NET Core和Java是跨平台的,并不是指.NET Core 平台和JVM是跨平台的,因为我们发现,在下载的时候,会根据不同的操作系统,下载不同版本的JVM,这说明他并不是跨平台的,跨平台的本质是指.class和.dll是跨平台的,它们可以在任何一个平台上通过命令行运行



展开阅读全文

没有更多推荐了,返回首页