dotNET5.0正式版本的新功能有哪些

這篇文章主要介紹“dotNET 5.0正式版本的新功能有哪些”,在日常操作中,相信很多人在dotNET 5.0正式版本的新功能有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”dotNET 5.0正式版本的新功能有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)公司主要從事網站設計、成都網站設計、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務伊犁,十年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792

今天微軟開發(fā)團隊宣布發(fā)布.NET 5.0正式版。主要更新包括C#9和F#5在內的一系列新功能和改進。同期發(fā)布了ASP.NET Core,EF  Core,C#9和F#5??梢栽诠俜较螺d頁面下載跨平臺包括Windows,macOS和Linux和跨處理架構包括x86,x64,Arm32,Arm64。

dotNET 5.0正式版本的新功能有哪些

Windows Visual Studio用戶,需要Visual Studio 16.8或更高版本才能支持.NET 5.0,在macOS用戶,需要  Visual Studio for Mac的最新版本。VS Code的C#插件已經完全支持.NET 5.0和C#9。

一、.NET 5.0亮點

帶來了大量的功能改進,其中最亮眼的是:

  • .NET 5.0已通過在dot.net和Bing()上托管,進行了數(shù)月來的測試。性能和穩(wěn)定性上有很大的提高。

  • C#9和F#5 帶了新的語言改進,例如C#9的Top-level編程和記錄,F(xiàn)#5提供了交互式編程,并提高了.NET上的功能性編程的性能。

  • .NET庫方面增強了Json序列化,正則表達式和HTTP(HTTP 1.1,HTTP/2)的性能。

  • 由于改進了GC,分層編譯和其他方面,P95延遲有所減少。

  • 通過ClickOnce客戶端應用程序發(fā)布,單文件應用程序,減小的容器映像大小以及添加的Server Core容器映像,應用程序部署選項更好。

  • Windows Arm64和WebAssembly擴展了平臺范圍。

1. 跨平臺和Microsoft支持

.NET 5.0有一個和.NET 3.1幾乎相同的平臺支持矩陣核心,適用于Windows,MacOS和Linux操作系統(tǒng)。如果操作系統(tǒng)支持使用.NET  Core 3.1,則大多數(shù)情況下應該可以升級使用.NET 5.0。.NET 5.0最重要的新增功能是Windows Arm64。

.NET 5.0發(fā)布三個月后,會發(fā)布一個LTS版本.NET  6.0,.NET5.0技術支持會持續(xù)到2022年2月中。.NET6.0技術支持期為三年。

.NET 5.0是微軟第一個統(tǒng)一平臺愿景的實現(xiàn)版本,可以使用一組API,語言和工具來針對廣泛的應用程序類型,包括移動,云,桌面和IoT。

實現(xiàn)這一愿景的第一步是整合.NET倉庫,其中包括很大一部分的Mono。為.NET運行庫和庫提供一個存儲庫是在各處交付相同產品的前提。它還有助于進行廣泛的更改,這些更改會影響運行時和庫,這些存儲庫以前具有回購邊界。有些人擔心大型回購交易將更難管理。事實并非如此。

在.NET 5.0版本中,Blazor是利用回購合并和.NET統(tǒng)一的最佳示例。Blazor WebAssembly的運行時和庫現(xiàn)在是從合并的dotnet  /運行時庫中構建的。服務器上的Blazor WebAssembly和Blazor使用完全相同的代碼。

2. 語言功能

作為.NET 5.0版本的一部分,C#9和F#5被包含在.NET 5.0 SDK中。Visual SDK也包含在5.0  SDK中。它不包括語言更改,但做了改進以支持.NET Core上的Visual Basic應用程序框架。

3. Top-level編程

Top-level編程是C#9中新推出的功能,下面一個led燈控制的演示程序,是官方Top-level編程的示例:

using System; using System.Device.Gpio; using System.Threading;   var pin = 18; var lightTime = 1000; var dimTime = 200;   Console.WriteLine($"Let's blink an LED!"); using GpioController controller = new (); controller.OpenPin(pin, PinMode.Output); Console.WriteLine($"GPIO pin enabled for use: {pin}");   // turn LED on and off while (true) { Console.WriteLine($"Light for {lightTime}ms"); controller.Write(pin, PinValue.High); Thread.Sleep(lightTime);   Console.WriteLine($"Dim for {dimTime}ms"); controller.Write(pin, PinValue.Low); Thread.Sleep(dimTime); }

從示例中可以看到target-typed的使用以及new對controller變量的分配。GpioController類型在定義等式左側所定義。而類型是在右側推斷的。該新語法是得替代傳統(tǒng)的var方法。

通過定義方法并利用同一文件或其他文件中定義的類型,Top-level編程還可能更加復雜。

4. 邏輯和屬性模式

C#9包括對新模式的支持。下面的CCS811氣體傳感器程序是邏輯模式的示例:

var threshChoice = Console.ReadKey(); Console.WriteLine(); if (threshChoice.KeyChar is 'Y' or 'y') { TestThresholdAndInterrupt(ccs811); }

另一個新模式是屬性模式。可以在Mycroft Information Access 6.0示例中看到幾個屬性檢查。在下面的代碼是從所拍攝的PN532  RFID和NFC讀取器示例:

if (pollingType is not { Length: <=15 }) { return null; }

該代碼測試pollingType是否為null或包含>15個字節(jié)。用來作為返回之前要測試的兩個錯誤條件。測試條件可以寫:

byte[]?nullpollingType is null or { Length: > 15 }

另外兩種模式。第一個是邏輯圖形中Mcp25xxx CAN總線。

public static byte GetRxBufferNumber(Address address) => address switch { >= Address.RxB0D0 and <= Address.RxB0D7 => 0, >= Address.RxB1D0 and <= Address.RxB1D7 => 1, _ => throw new ArgumentException(nameof(address), $"Invalid address value {address}."), };

第二個是一個邏輯模式在壓電蜂鳴器控制器。

if (element is not NoteElement noteElement) { // In case it's a pause element we have only just wait desired time. Thread.Sleep(durationInMilliseconds); } else { var frequency = GetFrequency(noteElement.Note, noteElement.Octave); _buzzer.PlayTone(frequency, (int)(durationInMilliseconds * 0.7)); Thread.Sleep((int)(durationInMilliseconds * 0.3)); }

5. 記錄

C#9包括一種稱為記錄的新型類。與常規(guī)類相比,它具有許多優(yōu)點,其中一半與更簡潔的語法有關。在下面的記錄是Bh2745 RGB傳感器的示例:

public record ChannelCompensationMultipliers(double Red, double Green, double Blue, double Clear);

可以這樣給其賦值:

ChannelCompensationMultipliers = new (2.2, 1.0, 1.8, 10.0);

6. 可空斷言改進

.NET庫現(xiàn)在已完全支持可空斷言。如果啟用可空性,將從平臺上獲取更多類型信息。

大類通常在從構造函數(shù)調用的幫助器方法中實例化對象成員。C#編譯器無法遵循對對象分配的調用流程。退出構造函數(shù)時,它會認為該成員為null,并使用發(fā)出警告CS8618。MemberNotNull屬性可解決此問題。該屬性應用于助手方法。然后,編譯器將看到設置了該值,并意識到該方法是從構造函數(shù)中調用的。

下面是一個在BMxx80溫度傳感器中的示例:

[MemberNotNull(nameof(_calibrationData))] private void ReadCalibrationData() { switch (this) { case Bme280 _: _calibrationData = new Bme280CalibrationData(); _controlRegister = (byte)Bmx280Register.CTRL_MEAS; break; case Bmp280 _: _calibrationData = new Bmp280CalibrationData(); _controlRegister = (byte)Bmx280Register.CTRL_MEAS; break; case Bme680 _: _calibrationData = new Bme680CalibrationData(); _controlRegister = (byte)Bme680Register.CTRL_MEAS; break; default: throw new Exception("Bmxx80 device not correctly configured. Could not find calibraton data."); }   _calibrationData.ReadFromDevice(this); }

實際的代碼中使用了條件編譯。因為項目是多目標的,并且.NET 5.0+僅支持此屬性。使用該屬性可以跳過運行時檢查(在構造函數(shù)中)。

7. 應用部署

編寫或更新應用程序后,需要對其進行以使用戶受益。這可能是到Web服務器,云服務或客戶端計算機的,并且可能是使用Azure DevOps或GitHub  Actions之類的服務的CI/CD流的結果。

.NET 5.0,專注于改進單個文件應用程序,減小docker多階段構建的容器大小,并為使用.NET  Core部署ClickOnce應用程序提供更好的支持。

8. 容器

容器是最重要的云趨勢,.NET軟件堆棧的多個級別以多種方式對容器進行支持。首先是在基礎方面的支持,這越來越受到容器方案和部署容器化應用程序的開發(fā)人員的影響。

為和容器協(xié)調器的合作變得更加容易。添加了OpenTelemetry支持,以便可以從應用程序中捕獲分布式跟蹤和指標。dotnet-monitor是一個新工具,旨在作為從.NET進程訪問診斷信息的主要方法。特別是,已經開始構建dotnet-monitor的容器變體,可以將其用作應用程序sidecar。還在構建dotnet/tye,以提高微服務開發(fā)人員在開發(fā)和部署到Kubernetes環(huán)境中的生產率。

.NET運行時現(xiàn)在支持cgroup v2,預計它將在2020年以后成為與容器相關的重要API。Docker當前使用cgroup  v1(.NET已經支持)。相比之下,cgroup v2比cgroup v1更簡單,更高效,更安全。Linux發(fā)行版和容器運行時正在。一旦變得更常見,.NET  5.0將在cgroup v2環(huán)境中正常工作。

除了Nano Server,還將發(fā)布Windows Server Core鏡像。該鏡像支持以下組合:Windows Server  2019長期服務通道(LTSC)、. NET 5.0和x64。還有其他更改,以減小Windows Server Core鏡像的大小。

作為使用" .NET"作為產品名稱的一部分,現(xiàn)在將.NET Core 2.1、3.1和.NET 5.0鏡像發(fā)布到repos系列。同.NET Core  2.1和3.1一起發(fā)布,同時支持多版本。.NET 5.0鏡像將發(fā)布到新位置。請相應地更新您的語句和腳本。

作為.NET  5.0的一部分,將SDK映像重新建立在ASP.NET鏡像之上,而不是buildpack-deps,以顯著減小在多階段構建方案中提取的聚合映像的大小。

Ubuntu 20.04 Focal 多階段構建成本:

dotNET 5.0正式版本的新功能有哪些

下載節(jié)省量:100 MB(-30%)

Debian 10 Buster 多階段構建成本:

dotNET 5.0正式版本的新功能有哪些

凈下載節(jié)省量:146 MB(-40%)

對Alpine和Nano Server進行了類似的更改。Alpine或Nano  Server沒有任何buildpack-depssdk鏡像。對于多階段構建,將看到Alpine和Nano Server以及5.0的巨大成功。

9. 單文件應用

單個文件應用程序作為單個文件發(fā)布和部署。該應用程序及其依賴項都包含在該文件中。當應用程序運行時,依賴項直接從該文件加載到內存中(不影響性能)。

在.NET  5.0中,單個文件應用程序主要集中在Linux上(稍后再介紹)。它們可以是框架相關的,也可以是獨立的。依賴于全局安裝的.NET運行時,依賴于框架的單個文件應用程序可能很小。自包含的單文件應用程序較大(由于帶有運行時),但不需要作為安裝前步驟就安裝.NET運行時,因此可以正常工作。通常,依賴框架對開發(fā)和企業(yè)環(huán)境有利,而對于ISV,獨立包含通常是更好的選擇。

在所有平臺上,都有一個名為"  apphost"的組件。這是成為可執(zhí)行文件的文件,例如在Windows上或myapp.exe./myapp在基于Unix的平臺上。對于單文件應用程序,創(chuàng)建了一個新的應用程序主機"超級主機"。它具有與常規(guī)apphost相同的角色,但還包含運行時的靜態(tài)鏈接副本。超級主機是單文件方法的基本設計點。該模型是在帶有.NET  5.0的Linux上使用的模型。由于各種操作系統(tǒng)限制,無法在Windows或macOS上實現(xiàn)此方法。在Windows或macOS上沒有超級主機。在這些操作系統(tǒng)上,本機運行時二進制文件(約3個)位于單個文件應用程序旁邊(導致"不是單個文件")。

框架相關的單文件應用程序:

dotnet publish -r linux-x64 --self-contained false /p:PublishSingleFile=true

自包含的單文件應用程序:

dotnet publish -r linux-x64 --self-contained true /p:PublishSingleFile=true

還可以使用項目文件配置單個文件發(fā)布。

<Project Sdk="Microsoft.NET.Sdk">   <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- The OS and CPU type you are targeting --> <RuntimeIdentifier>linux-x64</RuntimeIdentifier> <!-- Determine self-contained or framework-dependent --> <SelfContained>true</SelfContained> <!-- Enable single file --> <PublishSingleFile>true</PublishSingleFile> </PropertyGroup>   </Project>

10. ClickOnce

ClickOnce一直是流行的.NET部署選項。.NET Core 3.1和.NET 5.0 Windows應用程序現(xiàn)在支持它。在.NET Core  3.0添加Windows Forms和WPF支持時,許多人會希望使用ClickOnce進行應用程序部署。在過去的一年中,.NET和Visual  Studio團隊共同努力,以在命令行和Visual Studio中啟用ClickOnce發(fā)布:

dotNET 5.0正式版本的新功能有哪些

目前支持的主要部署模型是框架相關的應用程序。對.NET桌面運行時(即包含WPF和Windows窗體的運行時)的依賴很容易。

dotNET 5.0正式版本的新功能有哪些

dotNET 5.0正式版本的新功能有哪些

Mage的最大變化是它現(xiàn)在是在NuGet上分發(fā)的.NET工具。這意味著不需要在計算機上安裝任何特殊的東西,只需要.NET 5.0  SDK就可以將Mage安裝為.NET工具。也可以使用它來發(fā)布.NET  Framework應用程序,但是,SHA1簽名和部分信任支持已被刪除。Mage安裝命令如下:

dotnet tool install -g Microsoft.DotNet.Mage

制作并分發(fā)ClickOnce安裝程序后,用戶將看到熟悉的ClickOnce安裝對話框。

二、工具改善

新改進了Windows窗體設計器,更改了目標框架適用于.NET 5.0及更高版本的方式,更改了WinRT的支持方式,并進行了其他改進。

1. Windows窗體設計器

Windows Forms設計器(用于.NET Core 3.1和.NET 5.0)已經在Visual Studio  16.8中進行了更新,現(xiàn)在支持所有Windows Forms控件。它還支持WinForms控件的Telerik  UI。設計器包括期望的所有設計器功能,包括:拖放,選擇,移動和調整大小,剪切/復制/粘貼/刪除控件,與屬性窗口集成,事件生成等。數(shù)據(jù)綁定和對更廣泛的第三方控件的支持即將推出。

dotNET 5.0正式版本的新功能有哪些

2. .NET 5.0目標框架

新版本更改了用于目標框架的方法。以下項目文件演示了新的.NET 5.0目標框架。

<Project Sdk="Microsoft.NET.Sdk">  <PropertyGroup>  <OutputType>Exe</OutputType>  <TargetFramework>net5.0</TargetFramework>  </PropertyGroup>  </Project>

到目前為止,新表單比目前使用的樣式更緊湊,更直觀。另外,正在擴展目標框架以描述操作系統(tǒng)依賴性。

Windows桌面API(包括Windows窗體,WPF和WinRT)僅在net5.0-windows可用。可以指定操作系統(tǒng)版本,例如net5.0-windows7或net5.0-windows10.0.17763.0。如果要使用WinRT  API,則需要為Windows 10版本。

使用新的net5.0-windows  TFM時,跨平臺方案可能會更具挑戰(zhàn)性。如果您要避免為Windows構建或避免在Linux上提取Windows運行時程序包,

3. WinRT Interop(重大更改)

Windows API主題上,已移至一個新模型,以作為.NET 5.0的一部分來支持WinRT API。包括調用API(在任一方向上;CLR  <==> WinRT),兩個類型系統(tǒng)之間的數(shù)據(jù)封送處理以及打算在類型系統(tǒng)或ABI邊界上統(tǒng)一對待。

在.NET 5.0中現(xiàn)有的WinRT互操作體系已被去除,這是一個巨大的變化。這意味著使用WinRT和.NET Core  3.x的應用程序和庫將需要重建,并且不能按原樣在.NET 5.0上運行。使用WinRT API的庫將需要多目標來管理.NET Core 3.1和.NET  5.0之間的這種差異。

未來,將依靠Windows中的WinRT團隊提供的新CsWinRT工具。它生成基于C#的WinRT互操作程序集,可以通過NuGet交付該程序集。Windows團隊正是針對Windows中的WinRT  API所做的。希望將WinRT(在Windows上)用作互操作系統(tǒng)的任何人都可以使用該工具,以將本機API公開給.NET或將.NET  API公開給本機代碼。

CsWinRT工具在邏輯上類似于TLBIMP和tlbexp,雖然好多了。tlb工具依賴于.NET運行時中的許多COM互操作管道。CsWinRT工具僅依賴于公共.NET  API。就是說,C#9中的函數(shù)指針功能(部分在.NET 5.0運行時中實現(xiàn))在某種程度上受到CsWinRT工具需求的啟發(fā)。

這種新的WinRT互操作模型有幾個好處:

  • 可以獨立于.NET運行時進行開發(fā)和改進。

  • 它與為其他操作系統(tǒng)(如iOS和Android)提供的基于工具的互操作系統(tǒng)對稱。

  • 該工具可以利用其他.NET功能(AOT,C#功能,IL鏈接),而以前的系統(tǒng)則不提供該功能。

  • 簡化.NET運行時代碼庫。

  • 無需添加NuGet引用即可使用WinRT API。對于indows 10 TFM(在前面的.NET 5.0  TFM部分中已經討論過)就足夠了。如果目標是.NET Core 3.1或更早版本,則需要引用WinRT軟件包。

4. 本機導出

已經為導出本機二進制文件啟用導出,而本機二進制文件在很長一段時間內都已調用.NET代碼。該方案的構建塊是對UnmanagedCallersOnlyAttribute的。

.NET Native導出項目支持:

  • 公開自定義的本地出口。

  • 不需要像COM這樣的高級互操作技術。

  • 跨平臺工作。

5. 事件管道

事件管道是在.NET Core 2.2中添加的新的系統(tǒng)和API,可以在任何操作系統(tǒng)上執(zhí)行性能和其他診斷調查。在.NET  5.0中,事件管道已得到擴展,以使事件探查器能夠寫入事件管道事件。對于以前依靠ETW(在Windows上)監(jiān)視應用程序行為和性能的分析探查器,此方案至關重要。

新版本中可以通過事件管道獲得程序集加載信息。這項改進是開始提供類似的診斷功能(作為.NET  Framework的一部分)的開始,例如。現(xiàn)在,可以使用通過以下命令來收集此信息:

dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4:4 -- ./MyApp &ndash;my-arg 1

工作流在dotnet-trace docs中進行了描述??梢圆榭春唵螠y試應用程序的程序集加載信息。

dotNET 5.0正式版本的新功能有哪些

6. Microsoft.Extensions.Logging

Microsoft.Extensions.Logging庫中的控制臺日志提供程序進行了改進??梢酝ㄟ^ConsoleFormatter自定義對控制臺輸出的格式和顏色進行完全控制。格式化程序API通過實現(xiàn)VT-100(大多數(shù)現(xiàn)代終端支持的)轉義序列的子集來實現(xiàn)豐富的格式化??刂婆_記錄器可以解析不受支持的終端上的轉義序列,使您可以為所有終端編寫單個格式化程序。

除了支持自定義格式器外,還添加了內置的JSON格式器,該格式器向控制臺發(fā)出結構化JSON日志。

7. Dump調試

調試托管代碼需要了解托管對象和構造。數(shù)據(jù)訪問組件(DAC)是運行時執(zhí)行引擎的子集,該引擎具有這些構造的知識,并且可以在沒有運行時的情況下訪問這些托管對象?,F(xiàn)在,可以使用WinDBG或dotnet  dump analyze在Windows上分析在Linux上收集的.NET Core進程dump。

還添加了對從macOS上運行的.NET進程捕獲ELF  dump的支持。由于ELF不是macOS上的本機可執(zhí)行文件(像lldb這樣的本地調試器將無法與這些dump一起使用)文件格式,因此將其設為選擇加入功能。要在macOS上支持收集,請設置環(huán)境變量COMPlus_DbgEnableElfDumpOnMacOS=1??梢允褂胐otnet  dump analyze來分析產生的dump。

8. 打印環(huán)境信息

隨著.NET擴展了對新操作系統(tǒng)和芯片體系結構的支持,有時需要一種打印環(huán)境信息的方法。.NET5創(chuàng)建了一個簡單的.NET工具dotnet-runtimeinfo來執(zhí)行該操作。

可以使用以下命令安裝和運行該工具。

dotnet tool install -f dotnet-runtimeinfo dotnet-runtimeinfo

該工具以可以生成諸如如下格式的環(huán)境信息。

**.NET information Version: 5.0.0 FrameworkDescription: .NET 5.0.0 Libraries version: 5.0.0 Libraries hash: cf258a14b70ad9069470a108f13765e0e5988f51   **Environment information OSDescription: Linux 5.8.6-1-MANJARO-ARM #1 SMP Thu Sep 3 22:01:08 CEST 2020 OSVersion: Unix 5.8.6.1 OSArchitecture: Arm64 ProcessorCount: 6   **CGroup info** cfs_quota_us: -1 memory.limit_in_bytes: 9223372036854771712 memory.usage_in_bytes: 2740666368

其他更新

1. Windows Arm64

.NET應用程序現(xiàn)在可以在Windows Arm64上本機運行。這是在.NET Core 3.0中添加的對Linux  Arm64的支持(對glibc和musl的支持)。

在.NET 5.0中,可以在Windows Arm64設備(例如Surface Pro X)上開發(fā)和運行應用程序。已經可以通過x86仿真在Windows  Arm64上運行.NET Core和.NET Framework應用程序。這是可行的,但是本機Arm64執(zhí)行具有更好的性能。

用于Arm64的MSI安裝程序是此版本的最終更改之一。下面是.NET 5.0 SDK安裝程序。

dotNET 5.0正式版本的新功能有哪些

Windows Arm64上支持SDK,控制臺和ASP.NET Core應用程序,但Windows桌面組件暫不支持。

2. Windows上支持ICU

ICU庫用于Unicode和全球化支持,以前僅在Linux和macOS上使用?,F(xiàn)在在Windows  10上使用相同的庫。此更改使全球化API的行為(如特定文化區(qū)域的字符串比較)在Windows 10,macOS和Linux之間保持一致。還將ICU與Blazor  WebAssembly支持一起使用。

3. System.Text.Json

在.NET  5.0中已進行了顯著改善,在性能,可靠性,并使熟悉Newtonsoft.Json的人們更容易采用。它還包括對將JSON對象反序列化為記錄的支持。

dotNET 5.0正式版本的新功能有哪些

使更新可用時,用戶將看到更新對話框。

dotNET 5.0正式版本的新功能有哪些

到此,關于“dotNET 5.0正式版本的新功能有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

分享名稱:dotNET5.0正式版本的新功能有哪些
當前鏈接:http://bm7419.com/article28/ijppcp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供做網站、營銷型網站建設企業(yè)網站制作、品牌網站制作搜索引擎優(yōu)化、網站營銷

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作