重新认识 .net & .net core开发

余生长醉 提交于 2019-11-27 16:51:33

  最近想系统性的学习下.net core ,在这之前我想再重新的认识下.net ,以及跟.net core 的区别。

  有些我们开发.net经常用到的词汇可能还不是很了解,或者不能清晰的出他们的关系与却别,所以重新汇总了一下:

 .net :

  NET 是 Microsoft 的用以创建 XML Web 服务(下一代软件)平台,该平台将信息、设备和人以一种统一的、个性化的方式联系起来。借助于 .NET 平台,可以创建和使用基于 XML 的应用程序、进程和 Web 站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。简单的说,一个.NET应用是基于.NET Framework类库来编写,并运行于公共语言运行时 Common Language Runtime之上的应用程序。

CLR:

  Commen Language Runtime ,是一种多语言执行环境,支持众多的数据类型和语言特性,跟java虚拟机一样,是支持程序运行时的环境,它管理着代码的执行,负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。

CLI:

  通用语言基础结构(Common Language Infrastructure,CLI)是CLR的一个子集,也就是.NET中最终对编译成MSIL(微软中间语言)代码的应用程序的运行环境进行管理的那一部分。CLI为IL代码提供运行的环境,你可以将使用任何语言编写的代码通过其特定的编译器转换为 MSIL代码之后运行其上。

IL/CIL:

  Intermediate Language或者Common Intermediate Language,常被称作微软中间语言MSIL或通用中间语言CIL。(高级语言 => IL=>汇编(机器码)) .NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL-人类可读的最低阶的语言。JIT会把IL根据不同的CPU架构(如x86/IA64等等)生成不同的机器码。这也是 Java/.NET中“Compile Once,Run Everywhere”这一口号的技术基础:它们为不同的CPU架构提供了不同的“IL转化器”。

JIT:

  JIT(Just In Time简称JIT)是.Net边运行边编译的一种机制。

 

从微软推出的第一个版本.net 1.0开始到现在.net4.6,可以列为下面这个表(引用零点编程的汇总)

C#版本

.NET Framework版本

CLR版本

VisualStudio版本

C#1.0

.NET Framework 1.0

CLR1.0

Visual Studio 2002

C#1.2

.NET Framework 1.1

CLR1.1

Visual Studio 2003

C#2.0

.NET Framework 2.0

CLR2.0

Visual Studio 2005

C#3.0

.NET Framework 2.0

.NET Framework 3.0

.NET Framework 3.5

CLR2.0

Visual Studio 2008

Visual Studio 2010

C#4.0

.NET Framework 4.0

CLR4.0

Visual Studio 2010

C#5.0

.NET Framework 4.5

CLR4.0

Visual Studio 2012

Visual Studio 2013

C#6.0

.NET Framework 4.6

CLR4.0

Visual Studio 2015

net-framework-1.0

该版本是微软第一个.net framework版本,可独立安装,该版本主要包括公共语言运行库CLR1.0和、BCL类库和ASP.NET开发框架。

net-framework-1.1

增强了可伸缩性和性能,支持ASP.NET开发移动设备的应用程序、支持IPV6网络、ADO.NET、支持Oracle数据库进行本机通信。有了它,我们还能够使用代码访问安全性来进一步锁定和隔离ASP.NET应用程序,net-framework-1.1不是net-framework-1.0的升级版,而是一个独立的全新版本,全新的CLR1.1运行时,您可以在机器上同时安装net-framework-1.0和net-framework-1.1,两者互不影响。

net-framework-2.0

全新的改进,独立与之前的任何一个版本,独立安装,支持64位平台,运行库使用CLR2.0版本,新增泛型(Generic)、全新的API、多线程、内存分配、程序集动态加载、部分类(Partial关键字)、可空类型(Nullable)、匿名方法(Anonymous Method)、迭代器(Iterator)、DataTable和静态类(Static Class),对ADO.NET和ASP.NET框架的增强,在ASP.NET中支持主题、web部件、和Membership权限认证。

net-framework-2.0-sp1

net-framework-2.0-sp1是一个累计更新包,在net-framework-2.0发布后,客户报告了一些问题,针对这些问题,提供此更新,该更新还可帮助改进安全性,同时提供了net-framework-3.0-sp1和net-framework-3.5的系统必备功能支持,net-framework-2.0-sp1必须在net-framework-2.0的基础上进行安装。

net-framework-2.0-sp2

net-framework-2.0-sp2是一个累计更新包,在net-framework-2.0发布后,客户报告了一些问题,针对这些问题,提供此更新,同时提供了对net-framework-3.5-sp1的必备功能支持。

net-framework-3.0

独立安装包,安装包中已包含net-framework-2.0和net-framework-2.0-sp1,在这个版本中运行库仍然使用CLR2.0版本,基于net-framework-2.0的基础上新增WPF(Windows Presentation Foundation)、WCF(WindowsCommunication Foundation)、WF(Workflow Foundation)和CardSpace框架。

net-framework-3.0-sp1

针对net-framework-3.0发布后客户报告的问题提供了累积的汇总更新,该更新还可帮助改进安全性,同时提供了用于net-framework-3.5的必备功能支持。

net-framework-3.0-sp2

该更新用于解决在net-framework-3.5-sp1和net-framework-4.0混合环境中,在序列化和反序列化时,使用BinaryFormatter或NetDataContractSerializer不兼容问题,安装此更新可以解决这些问题。

net-framework-3.5

独立安装包,安装包已包含net-framework-3.0和net-framework-3.0-sp1,语言中新增LINQ、AJAX、局部var关键字、自动属性(直接写get和set)、匿名类型、对象与集合初始化器、扩展方法和Lambda表达式,新增

ADO.NET Entity Framework数据访问框架,添加两个新的程序集System.Web.Abstraction.dll和System.Web.Routing.dll。

net-framework-3.5-sp1

看似累计更新,实际上这个可以独立安装,它包含基于net-framework-2.0、3.0和3.5不断生成的新功能,此外还包括net-framework-2.0和net-framework-3.0子组件的累积更新。

net-framework-4.0

新的CLR4.0版本、任务并行库用于并行计算、PLINQ、方法的参数支持命名和可选参数、代码约定(Contracts)、动态语言运行时(DLR)、动态类型(dynamic)、集成托管扩展性框架 (MEF)和新增BigInteger和Complex类型。

net-framework-4.5

支持Metro风格的应用程序开发、可移植类库(Portable Class Libraries)、后台垃圾回收机制(BackgroundGC)、后台及时编译器(Background JIT)、异步方法、WebSocket、支持基于HTML5的ASP.NET应用程序开发、引入async和await关键字。

CLR表示公共语言运行时、BCL表示基础类库、FCL表示框架类库:

net-framework-1.0 = CLR1.0 + BCL

net-framework-1.1 = CLR1.1 + BCL

net-framework-2.0 = CLR2.0 + BCL+ FCL(WinForm + WebForm)

net-framework-3.0 = net-framework-2.0 + FCL(WCF + WPF + WF + WCS)

net-framework-3.5 = net-framework-3.0 + BCL(AJAX + Silverlight + LINQ + EF)

net-framework-4.0 = CLR4.0 + BCL(PLINQ + TaskParallel + DLR + BackgroundGC)

net-framework-4.5 = net-framework-4.0 + BCL(Metro + Async + BackgroundJIT + WebSockets)

 .net core

我们知道,.net程序想要在window上运行,他需要依赖window系统下的clr.dll等环境和类库,但是其他平台没有就运行不起来。先不说其他第三方组织做了其他平台.net实现,光是net-framework过于庞大而杂,有些库效率不如其他第三方库等就让人接受不了。在跨平台方面,虽然有mono(被微软收购)等第三方组织做了实现,但是还是很多缺陷。为此,微软正式推出.net core 旨在真正实现跨平台。

为了.net 平台的规范,防止.net类库方面的碎片化,微软.net 6.0开始推出了.net Standard(标准),基于这个标准,不管你用的是.NET Framework还是.NET Core只要该类被定义于.NET Standard中,我就一定能在对应支持的.NET Standard的版本的托管框架中找到它。

.net core 的安装

下载链接:https://dotnet.microsoft.com/download

下载最新的sdk,安装。如果想要验证你安装的有没成功,可以打开CMD领料窗口输入:dotnet -v 就会查看到.net的版本信息。

安装完成之后我们会在C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App\2.2.0下面看到你安装的版本目录(我装的是2.2.0),跟net-framewor一样,有一个coreclr.dll的运行库。

 

  这个目录下面我们也可以看到很多库都拆分成小的dll,使用起来也更加轻巧,不会有因为使用一个小的方法而把所有的库引用进来。但是这个也会造成很多开发者不熟悉库,找不到需要的dll,或者需要引入很多dll才能实现自己想要的。所以微软有一个包和元包的概念,下面解释。

我们用命令行创建一个控制台程序,输入dotnet new console -n myapp

 

桌面生成一个myapp的项目文件夹,命令行进入该目录,执行 dotnet run 可以直接编译运行该程序,其他一些命令可以通过dotnet -h查看

  我们看到目录中的项目文件是.csproj格式的,使用visual studio 打开。

   目录结构依赖项中有个SDK,下面Microsoft.NETCore.App下有很多引用包,这个Microsoft.NETCore.App就是一个元包,他下面的就是包,元包可以管理多个包。元包是将某一类的包打包成一个元包,在开发的时候直接引用元包,省去逐个引用的麻烦。

Microsoft.NETCore.App也是一个nuget的包,我们打开nuget包管理,安装Newtonsoft.Json包,如图。

  我们看到安装之后没有package.config这个配置文件了,其实包的安装配置整合在csproj项目文件里了。右键编辑项目文件可以看到,nuget包Newtonsoft.Json已经配置在节点ItemGroup下面了。

 

  这一章先大致了解下.net core一些表面的东西,后面慢慢写.net core更深层次的内容。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!