亦可赛艇

前天(2017年8月14日),.NET Standard 2.0正式版终于发布了,与之相配套的.NET Core 2.0也同时正式发布,真是令人振奋。

详情请看:https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/

这意味着.NET Standard最终走向了完善,.NET技术将获得全新的跨平台支持,当然我也迫不及待地把环境装上了。我要开始着手将公司的代码迁移到.NET Core平台上,以及让各个库全面支持.NET Standard 2.0。对于不太清楚.NET Framework、.NET Core以及.NET Standard之间的关系的朋友,我这里做一个简单的科普。

.NET的故事

.NET Framework诞生于2002年,伴随着Visual Studio 2002发布,这是一个高度模仿Java的运行平台,也就是说,编译器生成的不是机器语言代码,而是中间语言代码,然后再通过一个中间层,将中间语言代码翻译成机器语言来运行,所以拿它跟Java对比,大致如下:

  Java平台 .NET平台
开发语言 Java C#、VB.NET、Managed C++等
中间语言 Java bytecode Common Intermediate Language(CIL)
运行时 Java Virtual Machine Common Language Runtime(CLR)

.NET第一个版本出来的时候,Bug是相当的多,性能低下(跟Java早期版本一样),并不怎么受待见,但由于微软的大力推进,很快推出了1.1版,修复了大量的问题,性能也有了一些提升,而之后发布的版本,一个比一个牛逼,从技术角度来说,在早10年的时间里(是的,从2007年发布的.NET Framework 3.5算起),它就实现了对Java的全面超越。(仅个人观点,无意引发语言之争……),其版本变更履历可以参考下维基百科:https://en.wikipedia.org/wiki/.NET_Framework

但.NET Framework最大的问题始终没有很好解决,那就是:跨平台问题。它只能运行于微软专属的Windows操作系统,这大大阻碍了其在服务器领域的普及,尽管有非官方支持的Mono,但跨平台这个事情上面,它确实没法跟Java相提并论。

在微软新一任CEO纳德拉上台了之后,微软迅速调整了其发展策略,从过去的一切以Windows为中心的策略转移到“云”上,重点是考虑为用户提供怎样的服务,而不是提供怎样的操作系统。.NET Core从此诞生。

.NET Core的正式版1.0是在2016年7月发布的,到现在一年出头。

.NET Core从功能上来看,是.NET Framework的子集,因为有些Windows专属的东西(如涉及到GUI的WPF)是没办法在Linux上实现的。

一切看起来非常美好,现在相当于出现了两个.NET平台(如果算上Mono的话就3个了),一个是传统的Windows上的.NET Framework,它仍旧继续发展着(当前最新版是4.7),另一个是跨平台版的.NET Core,功能略差,但却可以跨平台。现在的问题是,我开发了一些库,到底是要用.NET Framework开发还是.NET Core开发呢?源代码理论上来说都是相同的,但两个平台又确实存在着差异,于是一个标准应运而生,它紧接着.NET Core的步伐发布,这就是.NET Standard,微软发话了:符合.NET Standard标准的库,不管是.NET Framework还是.NET Core都能直接使用!

接下来的日子里,.NET Core和.NET Standard发展势头如日中天,版本迭代一个接一个,社区气氛热闹非凡,微软甚至把它们的代码托管在全球著名的同性交友网站github.com中(相比之下,Java阵营则显得有些死气沉沉),一年之后,.NET Core 2.0和.NET Standard 2.0横空出世……

各.NET平台对.NET Standard的支持

下图来自于https://docs.microsoft.com/en-us/dotnet/standard/net-standard,表明了各个.NET平台对.NET Standard的支持情况。从这我们可能看出,.NET平台其实还蛮多的,但最最常用的应该就是.NET Framework和.NET Core了,我们主要记住下图中红框标出来的两个版本号即可。

另外,有些人有疑问,那个“ASP.NET Core”是什么玩意儿?其实ASP.NET Core跟.NET Core没有什么直接关系,它是ASP.NET的新一代框架,原先是想叫“ASP.NET 5”,因为它的前面一个版本是4.5,但后来微软想赋予它一个更远大的使命,所以干脆重新命名为ASP.NET Core,版本从1.0开始,而随着.NET Core 2.0的发布,ASP.NET Core 2.0也跟着一起出了,你也许想问在.NET Core 2.0上跑旧的ASP.NET 4.5的程序行不行?当然行,不过有新一代的产品,我们还是得看看,合适的话把现有代码迁移过去吧。

接下来我们来安装.NET Core 2.0。

首先升级VS2017(非必要)

如何升级VS2017很多人不懂,其实并不是在About中点“Check Update”或类似的,而是使用Visual Studio专门的安装程序,在Windows 10开始菜单中输入“Visual Studio Installer”:

找到后运行Visual Studio Installer。接下来的操作很简单,不需要多说了,当前最新版是15.3.0:

安装.NET Core 2.0

到这里来下载.NET Core 2.0的SDK:https://www.microsoft.com/net/download/core

我下载的是dotnet-sdk-2.0.0-win-x64.exe,安装之,这个过程很简单。

安装好之后就可以将你的项目的Target Framework设置为.NET Standard 2.0了。

接下来我有什么使用心得,我会陆续发在我的博客上,也就是这里。

.NET Standard 2.0正式发布了的更多相关文章

  1. .NET Core 2.0 正式发布信息汇总

    万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Standard 2.0的正式发布是.NET ...

  2. GrapeCity Documents (服务端文档API组件) V3.0 正式发布

    近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...

  3. CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF

    CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF https://devblogs.microsoft.com/dotnet/corewcf-v1-relea ...

  4. AppBox_v2.0完整版免费下载,暨AppBox_v3.0正式发布!

    文章更新: AppBox v6.0中实现子页面和父页面的复杂交互 AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox ...

  5. Socket.IO 1.0 正式发布,快速可靠的实时引擎

    Socket.IO 是目前 Web 领域最火的实时引擎,用于实现基于事件的双向实时的通信.它适用于任何平台,浏览器或设备,专注于可靠性和速度.您可以将数据推送到客户端,并获得实时的计数,日志或图表. ...

  6. Django 1.6.0 正式发布,大幅改进事务处理

    Django 1.6.0 正式发布了,查看官方发行说明. 下载地址:Django-1.6.tar.gz ,也可通过 pip 安装: pip install Django==1.6 要求 Python ...

  7. Apache Spark2.0正式发布

    Apache Spark2.0正式发布 7月26日起Databricks开始提供Apache Spark 2.0的下载,这个版本是基于社区在过去两年的经验总结而成,不但加入了用户喜爱的功能,也修复了之 ...

  8. 【G-BLASTN 1.0正式发布】

    [G-BLASTN 1.0正式发布]G-BLASTN使用GPU来加速NCBI-BLAST里的BLASTN模块,单块GTX780比四核CPU平均快6倍. http://www.comp.hkbu.edu ...

  9. avalon1.0正式发布

    2013年最后的收成:avalon1.0正式发布 大半年前我就说过,MVVM是前端究极的解决方案,因此之后我大多数时间都在折腾avalon,成立了专门的QQ群与感兴趣的一起讨论.感谢第一批吃螃蟹的人, ...

随机推荐

  1. JAVA 封装的简单运用

    package Code425;class person{ private String name ; String place; String school; String habits; int ...

  2. 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)

    1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...

  3. PDF怎么添加文字水印与图片水印

    现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...

  4. OpenCV-Python-图像梯度

    图像梯度 我们知道一阶导数可以用来求极值.把图片想象成连续函数,因为边缘部分的像素值与旁边的像素明显有区别,所以对图片局部求极值,就可以得到整幅图片的边缘信息.不过图片是二维的离散函数,导数就变成了差 ...

  5. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  6. .net基础学java系列(二)IDE 之 插件

    上一篇文章.net基础学java系列(二)IDE "扎实的基础"+"宽广的视野",基本可以帮我们摆脱码畜.码奴.码农的命运! IT领袖:IT大哥:IT精英:IT ...

  7. ansible的modules

    fetch   :从远端服务器拉取文件到本地 dest 依赖   本地存放拉取到的文件路径, 如果flat=yes,则会在该路径下直接存放文件, 如果flat=no,则会在该路径下生成每个服务器的in ...

  8. js数据结构与算法--双向链表的实现

    双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱.所以,双向链表中的任意一个节点开始,都可以很方便的访问它的前驱节点和后继节点. 双向链表的实现 linke ...

  9. js数据结构与算法--单链表的实现与应用思考

    链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...

  10. 从分布式一致性到共识机制(二)Raft算法

    春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...