.NET Core 2.0 特性介绍和使用指南

前言

这一篇会比较长,介绍了.NET Core 2.0新特性、工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径、提纲来用。

对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,我想通过一个系列来全面介绍:

  1. .Net大局观(1).NET Standard 2.0 特性介绍和使用指南(已发布)

  2. .Net大局观(2).NET Core 2.0 特性介绍和使用指南(已发布)

  3. .Net大局观(3)ASP.NET Core 2.0 特性介绍和使用指南

  4. .Net大局观(4)Entity Framework Core 2.0 特性介绍和使用指南


.NET Core 2.0发布最终版,基于.NET Core 2.0开发的项目可以放心用于生产环境。.NET Core 2.0开发不受开发工具影响,安装SDK之后便可以使用命令行工具,Visual Studio Code或者你喜欢的文本编辑器编写代码发布项目,当然对于重量级IDE需要更新到最新版:Visual Studio 2017 15.3、Visual Studio for Mac 7.1。

注意:VS 2017 15.3并没有包含SDK,需另外单独安装.NET Core 2.0 SDK。

个人更喜欢使用轻量级编辑器Visual Studio Code,对我而言更新Visual Studio 2017 15.3是一项不小的工程,但是这个最新版本提供的单元测试Live Unit Testing功能,是其他IDE不能相比的,这会成为TDD开发者的最爱!

.NET Core 2.0进行了多项重要改进,这使得.NET Core 2.0更加具备作为平台的能力。本文总结了.NET Core 2.0最新特性,详细改进细节,可以参考GitHub Issues:dotnet/core #812。

特性概述

Runtime(运行时)

  • 运行时和框架的主要提升性能

  • 实现.NET Standard 2.0

  • 更多的发行版,新增6个平台支持,包含Debian Stretch, SUSE Linux Enterprise Server 12 SP2, 和 macOS High Sierra.

  • RyuJIT is the x86 JIT in .NET Core 2.0

  • Linux 和 Windows ARM32 构建版已经发布预览

SDK

  • dotnet restore现在是一个隐式命令(需要的时候自动执行)

  • .NET Core 和 .NET Standard项目可以引用.NET Framework NuGet包、项目和程序集。

  • .NET Core SDK 可以进行源码编译,编译代码和脚本参看source-build repo

Visual Studio

  • 支持.NET Core项目Live Unit Testing

  • 代码导航的改进

  • C# Azure 函数支持

  • CI/CD 支持容器

使用指南

快速使用 .NET Core 2.0

首先请安装.NET Core SDK 2.0。(SDK中已经包含Runtime)

安装完成之后就可以使用命令行或Visual Studio创建.NET Core 2.0应用程序了。

创建新项目是极其简单的操作,在Visual Studio 2017可以使用提供的项目模板,也可以使用命令dotnet new执行命令创建:

C:\samples>dotnet new console -o console-app
C:\samples>cd console-app
C:\samples\console-app>dotnet run
Hello World!

项目和类库升级

可以将现有程序升级到 .NET Core 2.0。在Visual Studio中,更改目标框架为 .NET Core 2.0。

如果使用Visual Studio Code或者其他代码编辑器,手动编辑项目文件将目标框架改为netcoreapp2.0

<PropertyGroup>    <TargetFramework>netcoreapp2.0</TargetFramework></PropertyGroup>

.NET Core 2.0和1.0/1.1之间的关系

三个版本是独立的,且可可以共存,并分别使用对应的运行时,项目不会自动升级,除非设置了对应的版本。

开发环境下,安装了多个SDK版本,默认使用最新的版本,在安装完.NET Core 2.0 SDK之后,用于所有新创建的项目,指定为1.0和1.1版本的项目仍然使用对应版本运行时。

在项目中添加global.json配置文件,可以指定使用特定的SDK版本。

.NET CORE Rumtime改进

有以下主要改进

性能改进

在.NET Core 2.0中有多项性能改进,开发团队发布了一系列文章说明.NET Core Runtime改进的细节:

  • Performance Improvements in .NET Core

  • Performance Improvements in RyuJIT in .NET Core and .NET Framework

  • Profile-guided optimization in .NET Core 2.0

.NET Core 2.0基于.NET Standard 2.0

.NET Core 2.0实现了.NET Standard 2.0规范。

参看diff between .NET Core 2.0 and .NET Standard 2.0理解.NET Core 2.0提供API和.NET Standard 2.0规范。

将Linux作为单个操作系统更容易实现

.NET Core 2.0将Linux作为单个操作系统来对待。(Linux的版本很多,这项支持意味着在我们眼中不同的版本都是Linux,无视差异,提高Linux系统上的兼容性。)现在有一个单独的Linux构建(基于芯片架构的构建),它适用于测试过的所有Linux发行版。到目前为止,支持仅限于基于glibc的发行版,特别是基于Debian和Red hat的Linux发行版。

计划还将支持更多其他的Linux发行版。

Windows和macOS也有类似的改进。您现在可以将项目发布为以下的“运行时”:

  • linux-x64, linux-arm

  • win-x64, win-x86

  • osx-x64

Linux和Windows ARM32构建现在可用(预览版)

.NET Core开发团队正在为.NET Core 2.0+开发ARM32构建支持。

这些构建非常适合在树莓派使用。这些构建还没有正式发布,现在只是预览版。提供为.NET Core 2.0 生成ARM32 Runtime(没有SDK)。因此,需要在另一个操作系统上构建应用程序,然后复制到树莓Pi(或类似的设备)上运行。

下面是两个非常棒的 .NET Core ARM32开发实例:

  • .NET Core on Raspberry Pi

  • .NET Core Docker Samples

全球化模式

.NET Core 2.0包含新的opt-in globalization mode,提供与操作系统和语言一致的基本的全球化相关功能。这种新模式的好处在于它的一致性、没有任何全球化依赖。

参看.NET Core Globalization Invariant Mode了解更多关于这个特性的信息.

.NET Core SDK 改进

下面是主要改进

dotnet restore 调整为隐式命令

在需要的时候会自动调用,dotnet restore是命令中使用频率较高的,用于项目引用更新时,恢复依赖的引用包,尽管没有更新时会有提示执行,但这非常容易忘记。

现在,当我们执行命令,如:run,build,publish时,会自动调用dotnet restore

下面的示例演示

C:\Users\rich>dotnet new mvc -o mvcapp
The template "ASP.NET Core Web App (Model-View-Controller)" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/template-3pn for details.Processing post-creation actions...
Running 'dotnet restore' on mvcapp\mvcapp.csproj...
Restoring packages for C:\Users\rich\mvcapp\mvcapp.csproj...
Restore completed in 32.3 ms for C:\Users\rich\mvcapp\mvcapp.csproj.
Generating MSBuild file C:\Users\rich\mvcapp\obj\mvcapp.csproj.nuget.g.props.
Generating MSBuild file C:\Users\rich\mvcapp\obj\mvcapp.csproj.nuget.g.targets.
Restore completed in 2.26 sec for C:\Users\rich\mvcapp\mvcapp.csproj.
Restore succeeded.C:\Users\rich>cd mvcappC:\Users\rich\mvcapp>dotnet run
Hosting environment: Production
Content root path: C:\Users\rich\mvcapp
Now listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.
Application is shutting down...

创建项目后,会自动调用dotnet restore命令。

在.NET Standard项目中引用.NET Framework类库

这个功能将帮助我们将.NET Framework 快速迁移到.NET Standard或.NET Core,在迁移的过程中,先直接使用,那么随着时间的推移(从二进制文件开始,然后移动到源代码)迁移整个项目。

这个功能也为.NET Framework类库提供一个新的运行框架支持。

引用.NET Framework类库之后,类库中的类型仅限于使用在.NET Standard API集合中支持的类型,所以要谨慎对待,进行完整测试。

类库支持.NET Framework 4.6.1,或更早的版本,甚至包括1.0的版本。下图展示了这项功能的使用:

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 1188px; height: 514px;">

从应用程序的调用堆栈可以看出程序集的目标框架。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 717px; height: 102px;">

.NET Standard NuGet包无需任何依赖

类库的框架目标设置为 .NET Standard 2.0 或更高的版本,将无需任何依赖,底层依赖直接由.NET Core SDK提供。

下面是目标框架为.NET Standard 2.0的NuGet包配置文件:

<?xml version="1.0" encoding="utf-8"?><package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">    <metadata>        <id>ClassLibrary1</id>        <version>1.0.0</version>        <authors>ClassLibrary1</authors>        <owners>ClassLibrary1</owners>        <requireLicenseAcceptance>false</requireLicenseAcceptance>        <description>Package Description</description>        <dependencies>            <group targetFramework=".NETStandard2.0" />        </dependencies>    </metadata></package>

下面是目标框架为.NET Standard 1.4的NuGet包配置文件:

<?xml version="1.0" encoding="utf-8"?><package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">    <metadata>        <id>ClassLibrary1</id>        <version>1.0.0</version>        <authors>ClassLibrary1</authors>        <owners>ClassLibrary1</owners>        <requireLicenseAcceptance>false</requireLicenseAcceptance>        <description>Package Description</description>        <dependencies>            <group targetFramework=".NETStandard1.4">                <dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />            </group>        </dependencies>    </metadata></package>

Visual Studio 2017 15.3 更新

SDK并行支持

最新版本的VS,可以识别最新的.NET Core SDK,并且应用相关的工具。15.3版本中Visual Studio对.NET Core SDK提供并行支持,即在创建新项目时,默认使用安装的最高.NET Core SDK版本,同时允许您在需要时通过使用global.json来指定和使用旧版本。

这样可以使用VS构建针对不同.NET Core版本的应用。

Visual Basic 支持

除了支持C#和F#,15.3现在还支持使用Visual Basic来开发.NET Core应用程序。

Live Unit Testing 支持

Live Unit Testing (LUT)是Visual Studio 2017企业版中一项新功能,在15.3中支持.NET Core应用程序。热爱测试驱动开发(TDD)的用户肯定会喜欢这个新功能。

启用步骤非常简单:Test->Live Unit Testing->Start

如下图所示,当我们启用LUT,可以在代码编辑器中实时查看单元测试覆盖和测试结果反馈,注意左边的测试用例和右边的被测试代码。(这个好!)

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 975px; height: 628px;">

IDE生产力增强

Visual Studio 2017 15.3提供多项生产力增强功能,帮助更快写出更好的代码。现在支持通过EditorConfig设置.NET命名规范和格式化规则,这样允许您的团队执行和配置几乎所有代码的编码约定。(团队开发统一代码规范的痛点得到解决!赞!)

代码导航改进:添加GoToAll(Ctrl+T)支持camelCase匹配(大写简称匹配),只需要输入缩写,可以导航到任意文件、类型、成员定义,比如:bh将会搜索到BusHelper.cs

在下图中还可以看到建议的变量名,变量名遵循编辑器配置中的代码规范:

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 1342px; height: 191px;">

新增部分重构功能:

  • 解决合并冲突(Resolve merge conflict)

  • 添加参数(根据调用方法推断)

  • 生成重载(overrides)

  • Add named argument

  • Add null-check for parameters

  • Insert digit-separators into literals

  • Change base for numeric * literals (e.g., hex to binary)

  • Convert if-to-switch

  • Remove unused variable

项目系统优化

对项目文件.csproj进行优化,移除部分不需要的元素。从下图可以看到项目的依赖项进行分类,结构更加清晰。

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 380px; height: 487px;">

另一个针对.NET Core项目系统的增强是项目编译更加高效。

Docker支持

.NET Core 2.0项目可以更好的支持Docker:

  • Docker latest tag moved to .NET Core 2.0

  • microsoft/dotnet Docker Hub README adopted segmented OS/Arch style

  • Linux ARM32 Docker images are now available.

  • .NET Core 2.0 multi-arch tags now use Debian Stretch

  • .NET Core Docker images use multi-arch based tags

  • .NET Core supports Multi-Stage Build

版本支持和生命周期

.NET Core 2.0可以应用于生产环境。

微软有两个支持级别:长期支持(Long Term Support-LTS)和当前版本(Current release)。LTS版本有三年的支持,而当前版本更短,通常在一年左右,甚至可能更短。当前版本又被称为“快速跟踪支持”。.NET Core 1.0 and 1.1 是LTS版。

.NET Core 2.0是当前版本支持,正在等待质量和可靠性的反馈,然后会转到LTS支持。一般来说,在发布LTS版时,要确保该版本处于只需要为它提供安全修复的阶段,一旦你部署了一个带有LTS版本的应用程序,就不应该更新它,至少不会因为平台而更新。

Red Hat完全支持.NET Core,会很快发布相应的版本,可以查看这个网站RedHatLoves.NET查看。

还记得这些图片吗?微软高调示爱Linux

当然,爱是相互的,微软用了三年时间终于也收获了被爱的感觉,技术的最终方向是:融合,感动O(∩_∩)O~!

最后

2.0 是.NET Core一个重要的里程碑版本,让人感到非常兴奋!2.0不仅是目前所有.Net框架中最快的版本,同时.NET Standard 2.0也实现了承诺:让.NET无处不在。结合Visual Studio家族,.NET Core为开发人员在Windows、MacOS以及Linux系统提供最高效的开放平台。

写给自己的话

写文章真是一件耗费脑力和体力的事情,对这篇文章的整理和编辑持续两天才完成,计算下大概耗时4小时,感觉写代码爽多了,可能还没适应写东西,但是我会坚持更新完这个系列。希望更多人第一时间了解.NET Core!

原文地址:http://www.cnblogs.com/YGYH/p/7379461.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lombok MyBatisX

Lombok的使用 [1] 什么是LomBok lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具&#xff0c;简单来说&#xff0c;比如我们新建了一个类&#xff0c;然后在其中写了几个属性&#xff0c;然后通常情况下我们需要手动去建立g…

一次堆外OOM问题的排查过程

转载自 一次堆外OOM问题的排查过程 背景 线上服务有一台机器访问不通&#xff08;一个管理平台),在公司的服务治理平台上查看服务的状况是正常的&#xff0c;说明进程还在。进程并没有完全crash掉。去线上查看机器日志&#xff0c;发现了大量的OOM异常: 017-03-15 00:00:0…

Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制

InfoQ有幸采访了Microsoft执行副总裁Scott Guthrie&#xff0c;请他谈了谈Azure以及他最近的Red Shirt Dev Tours&#xff08;红杉开发之旅&#xff09;【译注1】。昨天我们谈到了Azure提供了自定义仪表盘的功能&#xff0c;它能够使得开发者创建自定义工作任务流程&#xff0c…

什么时候才能都及格呢?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。今天是周五&#xff0c;又到了周测的时候了&#xff0c;发现现在考试&#xff0c;学生们的抵触情绪不会那么强烈了&#xff0c;以前只要一说啥时啥时考试&#xff0c;下面一片哀嚎声&#xff0c;各种不…

解决Visual Studio For Mac Restore失败的问题

之前就了解到微软出了mac版的VS&#xff0c;没太多的关注&#xff0c;自己也就是使用 DotNet Core SDK VS Code 做一些小demo。 前两天发布了DotNet Core 2.0 &#xff0c;Visual Studio For Mac 7.1 之后&#xff0c;感觉可以装起来用用&#xff0c;把win下面的项目转到Core…

来之不易的美团面试,结果居然挂了...(附面试答案)

转载自 来之不易的美团面试&#xff0c;结果居然挂了...&#xff08;附面试答案&#xff09; 一面 自我介绍 答&#xff1a;自我介绍是面试中唯一的自己主动介绍自己的环节&#xff0c;一定要好好把握好&#xff0c;你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握…

三班的孩子们,你们现在还好吗?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。三班的孩子们&#xff0c;你们还好吗&#xff1f;虽然已经就业&#xff0c;但还是会时不时的想起你们来&#xff0c;希望你们过的一切都好&#xff0c;在公司中也能快速适应。上午拿着电脑准备去四班上…

升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

概述 容器&#xff0c;顾名思义是用来存放并容纳东西的器皿&#xff1b; 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘&#xff0c;它是一个抽象的概念&#xff0c;同时也是默默存在世上多年的技术&#xff0c;不仅能使应用程序间完全的隔离&#xff0c;而且还能在共享…

Spring Data Elasticsearch

文章目录一、 ELK二、 Elasticsearch简介三、 Linux安装Elasticsearch四、SpringData Elasticsearchpom.xmlapplication.yml创建实体创建索引 设置映射简单增删改查搜索五、 LogStash六、 使用Logback向Logstash中输出日志七、 在Kibana中查看日志信息八、 搭建日志系统九、 在…

项目参与度较低怎么办?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。经过这两天做项目的表现&#xff0c;可以很明显的看的出来学生与学生之间掌握的还是有差距的&#xff0c;组内有的组员是可以为项目贡献代码的&#xff0c;但是有的组员可能只能是贡献素材&#xff0c;…

从 TFS 迁移源代码到 git

准备工具&#xff1a; https://github.com/git-tfs/git-tfs 具体的安装步骤上面的 readme.md 中有说明。通过 Chocolatey 安装&#xff0c;如果本地没有 git &#xff0c;会自动安装 git 到本地。 迁移步骤&#xff1a; 从 Visual Studio 里面进入 Source Control Explorer…

缓存穿透、缓存并发、缓存失效之思路变迁

转载自 缓存穿透、缓存并发、缓存失效之思路变迁 在用缓存的时候&#xff0c;基本上会通用遇到以下三个问题&#xff1a; 缓存穿透缓存并发缓存失效 一、缓存穿透 上面三个图会有什么问题呢&#xff1f; 我们在项目中使用缓存通常都是先检查缓存中是否存在&#xff0c;如果…

jzoj3792,P2062-分队问题【贪心】

前言 题解上说&#xff1a; 然而我的贪心不仅A了&#xff0c;而且 反例也A了 自己的洛谷题解链接&#xff1a;https://www.luogu.org/blog/user52918/solution-p2062 正题 大意 n个人&#xff0c;每个人有一个要求a[i]表示他所在的队伍里不可以少于a[i]个人&#xff0…

.net core 2.0学习笔记(二):Hello World amp;amp; 进阶

官网已经有一个.net core的入手教程&#xff08;https://www.microsoft.com/net/core#windowscmd&#xff09;&#xff0c;但这个教程完全没有顾及全宇宙第一IDE的感受。今天就跟大家体验一下在VS2017上开发.net core程序吧。VS2017开发环境的搭建请参考&#xff1a;http://www…

MyBatis】MyBatis一级缓存和二级缓存

转载自 MyBatis】MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。 也就是在同一个SqlSession中&#xff0c;执行相同的查询SQL&#xff…

.net core 2.0学习笔记(一):开发运行环境搭建

期待已久的.net core 2.0终于发布了&#xff01;大家等的花儿都谢了。 不过比预期提前了一个多月&#xff0c;这在微软历史上还真的不多见。按照历史经验看&#xff0c;2.0版本应该比较靠谱&#xff0c;我猜这也是社区非常火爆的原因吧。下面就简单分享一下.net core2.0开发运行…

不好意思,你这个加分理由不行……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。周五了&#xff0c;又该周测了&#xff0c;今天和以往一样&#xff0c;上午前两节课都在上课&#xff0c;第三节课进行测试&#xff0c;这周的填空题有点儿多&#xff0c;所以考试的时间较…

SQL索引一步到位

转载自 SQL索引一步到位 SQL索引在数据库优化中占有一个非常大的比例&#xff0c; 一个好的索引的设计&#xff0c;可以让你的效率提高几十甚至几百倍&#xff0c;在这里将带你一步步揭开他的神秘面纱。 1.1 什么是索引&#xff1f; SQL索引有两种&#xff0c;聚集索引和非聚…

jzoj3794,P1383-高级打字机【欧拉序,离线O(n)】

正题 题目链接&#xff1a;https://www.luogu.org/problemnew/show/P1383 大意 三个操作 T c&#xff1a;加入一个字符c U x&#xff1a;撤销前x次操作&#xff08;只包括T和U&#xff09; Q x&#xff1a;询问当前第x个字符 解题思路 对于50%的数据U不会撤销到U 所以我们可…

你也可以做一个简易抽奖程序!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。今天给大家分享一个使用winform制作的小案例——随机点名&#xff08;抽奖&#xff09;程序&#xff0c;下面我们来看看运行结果&#xff1a;在班内点名为了公平起见&#xff0c;一直使用的…