微软宣布针对.NET Core、ASP.NET Core和Entity Framework
Core的支持计划。据来自微软的Lee
Coward介绍,公司计划使用一种双管齐下的方法来管理这些系统的发布。该计划回答了微软开源计划背后的其中一个主要问题——开发人员可以在多长时间内依赖微软向这些年轻的项目提供支持和安全补丁。

上个月微软 PowerShell
7发布了第5个预览版,离最终正式版本又更进了一步。本文介绍一下PowerShell
7将带来的5大变化,主要是一些大方向上的特性。

.NET Core 2.0发布日期:2017年8月14日

长期支持(LTS)发布在发布后将有一个3年的基本期,并且将来会在后继LTS发布后额外提供一年的支持。LTS发布可以视为稳定版,已经应用了针对安全问题和/或严重Bug的补丁。

.NET Core 3.0

前言

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

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

  1. .Net Core 2.0 生态(1).NET Standard 2.0
    特性介绍和使用指南(已发布)
  2. .Net Core 2.0 生态(2).NET Core 2.0
    特性介绍和使用指南(已发布)
  3. .Net Core 2.0 生态(3)ASP.NET Core 2.0
    特性介绍和使用指南(已发布)
  4. .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。

快速跟踪支持(FTS)包的发布是对LTS的补充。FTS版本将包含Bug修复,但主要精力集中在提供新特性上。FTS发布发生在相关父代LTS发
布的生命周期内。它们的典型支持周期为3个月,然后会有一次新的FTS发布。父代LTS生命周期内的最后一次FTS发布会有一年的支持期。开发人员可以使
用FTS发布试验最新特性,同时依靠LTS包保持关键系统的稳定。

16年开源之前,PowerShell仅支持Windows,并且基于.NET框架,开源之后基础框架修改为.NET
Core,.NET Core支持所有操作系统,使得PowerShell支持Linux与macOS。

特性概述

这些发布的版本系统会保持一致,并遵循模式major.minor.patch。LTS发布会增加主版本(如4.0.0)。FTS发布会增加小版本号,并且与相关的父代使用相同的主版本(如4.1.0)。两者在必要时都会使用补丁版本(如4.0.1或4.1.1)。

PowerShell 7的一项重大工作是将PowerShell Core 6代码库移植到.NET Core
3.0,所以PowerShell的发布时间取决于使用.NET Core
3.0完成PowerShell的集成和验证。

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
    构建版已经发布预览

微软的Rich
Lander已经提供了版本系统的完整文档,并为那些希望完全理解这个过程的用户提供了其他的例子。

微软表示为了让PowerShell 7与.NET Core时间轴保持一致,因此GA版本将在.NET
Core 3.0发布GA之后再推出。

SDK

  • dotnet
    restore现在是一个隐式命令(需要的时候自动执行)
  • .NET Core 和 .NET Standard项目可以引用.NET Framework
    NuGet包、项目和程序集。
  • .NET Core SDK 可以进行源码编译,编译代码和脚本参看source-build
    repo

查看英文原文:Microsoft’s Plans for .NET Core
Support

另外,值得一提的是,PowerShell上一个大版本是PowerShell Core
6.2,新版本不是PowerShell Core 6.3而变成PowerShell
7是因为在过去两年里,PowerShell
Core的使用率显着增加,其中大部分增长来自Linux平台,这对于将PowerShell打造成跨平台工具是一个可喜的数据,但是Windows版本的使用量并没有显着增长,微软表示这可能与Windows平台上版本的功能缺失有关,由于不支持的模块、程序集和API,现有的PowerShell用户无法利用PowerShell
Core的新功能、性能增强和bug修复。为了解决这个问题,微软决定在PowerShell
7中完全替换Windows PowerShell 5.1。

Visual Studio

稿源:infoQ  
作者 Jeff
Martin,译者谢丽

Windows兼容性

使用指南

PowerShell 7的主要目标之一是缩小PowerShell与PowerShell
Core之间可用cmdlet数量的差距,目标是提高与模块的兼容性,以在这些版本之间实现奇偶校验,以便管理员可以无缝地完全迁移到PowerShell
Core。

快速使用 .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:samplesconsole-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>

微软将为PowerShell采用新的生命周期,发布LTS和非LTS版本的PowerShell
7,使其与.NET
Core支持的生命周期紧密保持一致。每月将提供预览版本,以便尽早获得反馈。与当前发行版相比,LTS发行版将在最初发行后的三年内得到支持,而当前发行版仅在随后的当前发行版或LTS发行后的三个月内得到支持。

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

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

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

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

安全凭证管理

.NET CORE Rumtime改进

有以下主要改进

脚本编写通常可以通过自动化任务来简化IT管理员的工作,但是随着对本地、云和混合资源的依赖越来越大,这可能导致需要多个凭据的资源无法正常运行。PowerShell拥有用于在一定程度上保护凭据的方法,以在某种程度上避免在脚本中嵌入纯文本形式的凭证。

性能改进

在.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

PowerShell的日志记录功能仅限于本地计算机,执行脚本和cmdlet生成的日志都会保留在运行cmdlet的本地设备上。这样可以对日志进行排序,以获取有关问题的反馈,但却非常耗时,需要用户分别查看所有设备。PowerShell
7.0通过策略将日志收集标准化,该策略会将所有日志定向到目标系统,以进行OS无关的集中式管理。

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

本文参考了“5 changes coming to PowerShell
7.0”,关于PowerShell更多相关内容可以查看:

全球化模式

.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:Usersrich>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 mvcappmvcapp.csproj...
Restoring packages for C:Usersrichmvcappmvcapp.csproj...
Restore completed in 32.3 ms for C:Usersrichmvcappmvcapp.csproj.
Generating MSBuild file C:Usersrichmvcappobjmvcapp.csproj.nuget.g.props.
Generating MSBuild file C:Usersrichmvcappobjmvcapp.csproj.nuget.g.targets.
Restore completed in 2.26 sec for C:Usersrichmvcappmvcapp.csproj.
Restore succeeded.

C:Usersrich>cd mvcapp

C:Usersrichmvcapp>dotnet run
Hosting environment: Production
Content root path: C:Usersrichmvcapp
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的版本。下图展示了这项功能的使用:

澳门新葡萄京所有网站 1

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

澳门新葡萄京所有网站 2

.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,可以在代码编辑器中实时查看单元测试覆盖和测试结果反馈,注意左边的测试用例和右边的被测试代码。(这个好!)

澳门新葡萄京所有网站 3

IDE生产力增强

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

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

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

澳门新葡萄京所有网站 4

新增部分重构功能:

  • 解决合并冲突(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进行优化,移除部分不需要的元素。从下图可以看到项目的依赖项进行分类,结构更加清晰。

澳门新葡萄京所有网站 5

另一个针对.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

澳门新葡萄京所有网站 6

澳门新葡萄京所有网站 7

澳门新葡萄京所有网站 8

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

澳门新葡萄京所有网站 9

最后

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

写给自己的话

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