.Net大局观(2).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发布最终版,基于.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(运行时) SDK Visual Studio 使用指南 快速使用 .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改进的细节:
.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和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: :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的版本。下图展示了这项功能的使用:
从应用程序的调用堆栈可以看出程序集的目标框架。