.Net大局觀(2).NET Core 2.0 特性介紹和使用指南

来源:http://www.cnblogs.com/YGYH/archive/2017/08/17/7379461.html
-Advertisement-
Play Games

.NET Core 2.0發佈日期:2017年8月14日 前言 這一篇會比較長,介紹了.NET Core 2.0新特性、工具支持及系統生態,現狀及未來計劃,可以作為一門技術的概述來讀,也可以作為學習路徑、提綱來用。 對於.NET Core 2.0的發佈介紹,圍繞2.0的架構體系,我想通過一個系列來全 ...


.NET Core 2.0發佈日期:2017年8月14日

前言

這一篇會比較長,介紹了.NET Core 2.0新特性、工具支持及系統生態,現狀及未來計劃,可以作為一門技術的概述來讀,也可以作為學習路徑、提綱來用。

對於.NET Core 2.0的發佈介紹,圍繞2.0的架構體系,我想通過一個系列來全面介紹:

  1. .Net大局觀(1).NET Standard 2.0 特性介紹和使用指南(已發佈)
  2. .Net大局觀(2).NET Core 2.0 特性介紹和使用指南(已發佈)
  3. .Net大局觀(3)ASP.NET Core 2.0 特性介紹和使用指南
  4. .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.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!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 離散查詢select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price in(30,40,50,60)取出數據select * from car where pric ...
  • CREATE DEFINER=`sas_settle`@`%` PROCEDURE `P_CREATE_ACCOUNT_CARRIER_TASK`() BEGIN DECLARE done INT DEFAULT 0; DECLARE v_flow_id VARCHAR(10); -- 流水號 DE... ...
  • VMware tools是虛擬機上虛擬硬體的驅動,可以實現滑鼠的無縫移出移入,剪貼板共用,共用文件夾等功能。很多的Linux系統初學者,在安裝centos6.9系統時,沒有安裝VMware tools,但是想要安裝VMware tools要使用命令行方式。這對於Linux初學者來說有一定的困難,本文 ...
  • 一、概述 vi中基本的游標移動命令有:h、j、k、l。 其中,h為游標左移1位,j為游標下移1行,k為游標上移1行,l為游標右移1位。 上述命令支持“數字+命令”格式,1次移動多位(行)。 二、示例 初始狀態 01234 0123 012 運行命令:l 01234 0123 012 運行命令:3l ...
  • 我們在本地部署了自己的nuget伺服器,有時可以需要用到nuget restore命令去恢復包包,它會從下麵的nuget.config里讀你的配置源信息,就是在這裡,我們要把內測的nuget伺服器路徑添加上,這樣就可以了。 NUGET服務配置地址:%AppData%\Nuget\ 關鍵信息 有興趣的 ...
  • 在centos上搭建一個ftp,一切都配置好之後,我去訪問時仍然會出現425 Failed to establish connection.這個錯誤,經過一番查找,原來是這個 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWA ...
  • 有了前兩講的基礎,這回我們就可以把github上的項目做到CI(jenkins)里了,讓它自動去集成部署,持續集成~Jenkins里的NuGet和MSBuild插件,持續集成~Jenkins里的powershell插件發佈遠程站點了,下麵我們來說一下操作步驟。 進行jenkins操作 http:// ...
  • 一、proc文件系統是什麼? proc是一個偽文件系統,偽文件系統的定義: 它只存在記憶體當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供介面。用戶和應用程式可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程式讀取pr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...