最近想系统性的学习下.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更深层次的内容。

1)NET CORE 重新认识 .net & .net core的更多相关文章

  1. ASP.NET 5 已死 - 隆重介绍 ASP.NET Core 1.0 和 .NET Core 1.0

    还没正式登场就死了?不能怪我标题党,是大神Scott在他博客上这么说的,我只是翻译了一下. 在1月20号最新的ASP.NET Community Standup视频中,微软aspnet开发组的大帅哥 ...

  2. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  3. ASP.NET Core 开发 - Entity Framework (EF) Core

    EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...

  4. 什么是core dump linux下用core和gdb查询出现"段错误"的地方

    什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...

  5. 《驾驭Core Data》 第一章 Core Data概述

    <驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...

  6. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  7. .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介

    .NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...

  8. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  9. Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...

  10. [翻译 EF Core in Action 1.9] 掀开EF Core的引擎盖看看EF Core内部是如何工作的

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

随机推荐

  1. Linux下emacs如何安装

    ftp://ftp.gnu.org/gnu/emacs/ 下载对应版本编译安装 cd 自己想安装的目录 sudo wget ftp://ftp.gnu.org/gnu/emacs/emacs-24.4 ...

  2. 在Nginx容器安装Keepalived后端项目双机热备

    docker exec -it n1 bash apt-get update apt-get install keepalived apt-get install vim 再次之前要配置VIP虚拟IP ...

  3. CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法

    CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...

  4. Linux下查找命令 —— find、grep、 which、 whereis、 locate

    find命令 基本格式 find < path > < expression > < cmd > ''' path: 所要搜索的目录及其所有子目录.默认为当前目录. ...

  5. mysql全文索引:fulltext

    fulltext全文索引 要使用全文索引,不仅需要把某个字段的索引类型设置为fulltext,还需要修改mysql配置文件: [mysqld] ft_wordlist_charset #表示词典的字符 ...

  6. 转 Linux sudo命令

    脚本中使用$HOME变量 问题描述:某些同事原来写的脚本中包含如下内容. BIN_DIR=${HOME}/tools TAIR_BIN_DIR=${HOME}/tair_binTAIR_SRC_DIR ...

  7. js 类型判断

  8. SRC漏洞挖掘

    SRC目标搜集 文章类的平台 https://www.anquanke.com/src 百度搜索 首先得知道SRC厂商的关键字,利用脚本搜集一波. 比如[应急响应中心]就可以作为一个关键字.通过搜索引 ...

  9. Python 内置函数--range() xrange()

    >>>xrange(8) xrange(8) >>> list(xrange(8)) [0, 1, 2, 3, 4, 5, 6, 7] >>> r ...

  10. ztree取消之前选中状态并设置新的选中

    var zTreeObject = $.fn.zTree.getZTreeObj("treeId"); var node = zTreeObject.getNodeByParam( ...