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的架構體系,我想通過一個系列來全面介紹:

  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.3Visual 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項目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改進的細節:

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

版本支持和生命周期

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM