NET Core 2.0 介绍和使用
NET Core 2.0 特性介绍和使用指南
阅读目录
.NET Core 2.0发布日期:2017年8月14日
前言
这一篇会比较长,介绍了.NET Core 2.0新特性、工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径、提纲来用。
对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,我想通过一个系列来全面介绍:
- .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(3)ASP.NET Core 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(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 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 mvcapp
C:\Users\rich\mvcapp>dotnet run
Hosting environment: Production
Content root path: C:\Users\rich\mvcapp
Now listening on: http://localhost:5000
Application 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的版本。下图展示了这项功能的使用:
从应用程序的调用堆栈可以看出程序集的目标框架。
.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,可以在代码编辑器中实时查看单元测试覆盖和测试结果反馈,注意左边的测试用例和右边的被测试代码。(这个好!)
IDE生产力增强
Visual Studio 2017 15.3提供多项生产力增强功能,帮助更快写出更好的代码。现在支持通过EditorConfig设置.NET命名规范和格式化规则,这样允许您的团队执行和配置几乎所有代码的编码约定。(团队开发统一代码规范的痛点得到解决!赞!)
代码导航改进:添加GoToAll(Ctrl+T)支持camelCase匹配(大写简称匹配),只需要输入缩写,可以导航到任意文件、类型、成员定义,比如:bh
将会搜索到BusHelper.cs
。
在下图中还可以看到建议的变量名,变量名遵循编辑器配置中的代码规范:
新增部分重构功能:
- 解决合并冲突(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
进行优化,移除部分不需要的元素。从下图可以看到项目的依赖项进行分类,结构更加清晰。
另一个针对.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!
NET Core 2.0 介绍和使用的更多相关文章
- ASP.NET 5 已死 - 隆重介绍 ASP.NET Core 1.0 和 .NET Core 1.0
还没正式登场就死了?不能怪我标题党,是大神Scott在他博客上这么说的,我只是翻译了一下. 在1月20号最新的ASP.NET Community Standup视频中,微软aspnet开发组的大帅哥 ...
- .Net大局观(2).NET Core 2.0 特性介绍和使用指南
.NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,系统地介绍了.NET Core 2.0及生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径.提纲来用. ...
- .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南
ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...
- .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
- .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南
.NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路 ...
- .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南
.NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...
- OpenID Connect Core 1.0(一)介绍
IdentityServer4是基于OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文档 By 道法 ...
- 【EF】Entity Framework Core 2.0 特性介绍和使用指南
阅读目录 前言 获取和使用 新特性 项目升级和核心API变化 下一步计划 遗憾的地方 回到目录 前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升 ...
随机推荐
- leetcode 229. Majority Element II(多数投票算法)
就是简单的应用多数投票算法(Boyer–Moore majority vote algorithm),参见这道题的题解. class Solution { public: vector<int& ...
- MCI支持的格式在注册表中的位置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
- 发挥到极致的Asterisk SS7 解决方案【转】
基于SS7的开源解决方案在国内已经安装了很多.很多用户都使用chan_ss7 开源协议栈作为呼叫中心,400电话,计费结算的系统.随着国内对开源Asterisk的认可程度越来越高. Asterisk让 ...
- ACM学习历程—Hihocoder 1177 顺子(模拟 && 排序 && gcd)(hihoCoder挑战赛12)
时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种 ...
- rman理论(一)
1) 快照控制文件:开始备份后,RMAN 需要这些信息在备份操作期间保持一致,也就是说RMAN需要一个读取一致的控制文件视图. 除非RMAN 在备份持续时间内锁定控制文件,否则数据库会不断更新控制文件 ...
- poj 2069 Super Star——模拟退火(收敛)
题目:http://poj.org/problem?id=2069 不是随机走,而是每次向最远的点逼近.而且也不是向该点逼近随意值,而是按那个比例:这样就总是接受,但答案还是要取min更新. 不知那个 ...
- 分布式环境下的session管理
一.分布式Session的几种实现方式 1.1.基于cookie 进行session共享 简单.方便,每次通过判断cookie中的用户状态信息判断用户的登录状态:但是用户信息要存在客户端,存在安全隐患 ...
- matlab形态学图像处理之strel函数
转自:http://blog.sina.com.cn/s/blog_b1cd5d330101pmwi.html strel--structuring element 运用各种形状和大小构造元素,基本语 ...
- nginx中有关命令和日志切割,配置文件加载的详细阐述
一.Nginx简介 Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器.Nginx 已经在俄罗斯最大的门户网站── Ram ...
- 使用gRPC搭建Server端与Client端
gRPC简介 gRPC是一种RPC框架技术,采用Protocal Buffers(协议缓存) 作为其接口定义的语言(就是Proto来写接口)和基础的消息交换格式. 在gRPC中,客户端应用程序可以直接 ...