这一篇会比较长,介绍了.NET Core 2.0新特性、工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径、提纲来用。
对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,我想通过一个系列来全面介绍:
.Net大局观(1).NET Standard 2.0 特性介绍和使用指南(已发布)
.Net大局观(2).NET Core 2.0 特性介绍和使用指南(已发布)
.Net大局观(3)ASP.NET Core 2.0 特性介绍和使用指南
.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。
运行时和框架的主要提升性能
实现.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 构建版已经发布预览
dotnet restore现在是一个隐式命令(需要的时候自动执行)
.NET Core 和 .NET Standard项目可以引用.NET Framework NuGet包、项目和程序集。
.NET Core SDK 可以进行源码编译,编译代码和脚本参看source-build repo
支持.NET Core项目Live Unit Testing
代码导航的改进
C# Azure 函数支持
CI/CD 支持容器
首先请安装.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.0TargetFramework>PropertyGroup>
三个版本是独立的,且可可以共存,并分别使用对应的运行时,项目不会自动升级,除非设置了对应的版本。
开发环境下,安装了多个SDK版本,默认使用最新的版本,在安装完.NET Core 2.0 SDK之后,用于所有新创建的项目,指定为1.0和1.1版本的项目仍然使用对应版本运行时。
在项目中添加global.json配置文件,可以指定使用特定的SDK版本。
有以下主要改进
在.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规范。
参看diff between .NET Core 2.0 and .NET Standard 2.0理解.NET Core 2.0提供API和.NET Standard 2.0规范。
.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
.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了解更多关于这个特性的信息.
下面是主要改进
在需要的时候会自动调用,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 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 2.0 或更高的版本,将无需任何依赖,底层依赖直接由.NET Core SDK提供。
下面是目标框架为.NET Standard 2.0的NuGet包配置文件:
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>ClassLibrary1id> <version>1.0.0version> <authors>ClassLibrary1authors> <owners>ClassLibrary1owners> <requireLicenseAcceptance>falserequireLicenseAcceptance> <description>Package Descriptiondescription> <dependencies> <group targetFramework=".NETStandard2.0" /> dependencies> metadata>package>
下面是目标框架为.NET Standard 1.4的NuGet包配置文件:
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>ClassLibrary1id> <version>1.0.0version> <authors>ClassLibrary1authors> <owners>ClassLibrary1owners> <requireLicenseAcceptance>falserequireLicenseAcceptance> <description>Package Descriptiondescription> <dependencies> <group targetFramework=".NETStandard1.4"> <dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" /> group> dependencies> metadata>package>
最新版本的VS,可以识别最新的.NET Core SDK,并且应用相关的工具。15.3版本中Visual Studio对.NET Core SDK提供并行支持,即在创建新项目时,默认使用安装的最高.NET Core SDK版本,同时允许您在需要时通过使用global.json来指定和使用旧版本。
这样可以使用VS构建针对不同.NET Core版本的应用。
除了支持C#和F#,15.3现在还支持使用Visual Basic来开发.NET Core应用程序。
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;">
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项目系统的增强是项目编译更加高效。
.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跨平台或扫描二维码关注