Novinky v .NET 7
.NET 7 je následníkem .NET 6 a zaměřuje se na to, aby byl jednotný, moderní, jednoduchý a rychlý. Rozhraní .NET 7 bude podporováno po dobu 18 měsíců jako standardní verze podpory (STS) (dříve označované jako aktuální verze).
Tento článek uvádí nové funkce rozhraní .NET 7 a obsahuje odkazy na podrobnější informace o jednotlivých funkcích.
Výkon
Výkon je klíčovým cílem rozhraní .NET 7 a všechny jeho funkce jsou navržené s ohledem na výkon. Kromě toho .NET 7 zahrnuje následující vylepšení zaměřená čistě na výkon:
- Náhrada na zásobníku (OSR) je doplněk vrstvené kompilace. Umožňuje modulu runtime změnit kód spuštěný aktuálně běžící metodou během jejího provádění (to znamená, že je právě ve stacku). Dlouhotrvající metody se můžou přepnout na optimalizovanější verze uprostřed spouštění.
- Optimalizace s asistencí profilu (PGO) teď funguje s OSR a je jednodušší ji povolit (přidáním
<TieredPGO>true</TieredPGO>
do souboru projektu). PGO může také instrumentovat a optimalizovat další věci, jako jsou delegáti. - Vylepšené generování kódu pro Arm64
- nativní AOT vytvoří samostatný spustitelný soubor ve formátu cílové platformy bez externích závislostí. Je zcela nativní bez IL nebo JIT a poskytuje rychlý čas spuštění a malé samostatné nasazení. Nativní AOT se v .NET 7 zaměřuje na konzolové aplikace a vyžaduje prořezání aplikací.
- Vylepšení výkonu modulu runtime Mono, který pohání aplikace Blazor WebAssembly, Android a iOS.
Podrobný pohled na řadu funkcí zaměřených na výkon, díky kterým je .NET 7 tak rychlý, najdete v blogovém příspěvku o vylepšení výkonu v .NET 7.
Serializace System.Text.Json
.NET 7 zahrnuje vylepšení serializace System.Text.Json v následujících oblastech:
- Přizpůsobení kontraktu vám poskytuje větší kontrolu nad tím, jak jsou typy serializovány a deserializovány. Další informace najdete v tématu Přizpůsobení kontraktu JSON.
- polymorfní serializace pro hierarchie typů definované uživatelem. Další informace naleznete v tématu Serializace vlastností odvozených tříd.
- Podpora vyžadovaných členů , což jsou vlastnosti, které musí být přítomny v datové části JSON, aby deserializace proběhla úspěšně. Další informace naleznete v tématu Požadované vlastnosti.
Informace o těchto a dalších aktualizacích najdete v blogovém příspěvku Co je nového v souboru System.Text.Json v .NET 7 blogovém příspěvku.
Obecná matematika
.NET 7 a C# 11 zahrnují inovace, které umožňují provádět matematické operace obecně – to znamená, že nemusíte znát přesný typ, se kterým pracujete. Pokud byste například chtěli napsat metodu, která sečte dvě čísla, museli jste dříve přidat přetížení metody pro každý typ. Teď můžete napsat jednu obecnou metodu, kde je parametr typu omezený na typ podobný číslu. Další informace najdete v článku Obecné matematické a blogovém příspěvku Obecné matematické.
Regulární výrazy
Knihovna regulárních výrazů zaznamenala významná vylepšení funkcionality a výkonu v .NET 7:
Nová možnost RegexOptions.NonBacktracking umožňuje porovnávání pomocí přístupu, který zabraňuje zpětnému prohledávání a zaručuje zpracování v lineárním čase vzhledem k délce vstupu. Modul bez zpětného navracení se nedá použít ve vyhledávání zprava doleva a má několik dalších omezení, ale je rychlý pro všechny regulární výrazy a vstupy. Další informace naleznete v tématu režim bez zpětného sledování.
Generátory zdrojů regulárních výrazů jsou nové. Zdrojové generátory vytvářejí stroj, který je optimalizovaný pro vzor v době kompilace a poskytuje výhody výkonu propustnosti. Zdroj, který se vygeneruje, je součástí projektu, takže ho můžete zobrazit a ladit. Kromě toho vás nová diagnostika generátoru zdrojů
SYSLIB1045
upozorní na místa, kde používáte Regex a která by mohla být převedena na generátor zdrojů. Další informace najdete v tématu generátory zdrojů regulárních výrazů .NET.Pro vyhledávání bez rozlišování malých a velkých písmen zahrnuje .NET 7 velké zvýšení výkonu. K zisku dochází, protože specifikace RegexOptions.IgnoreCase už nevolá ToLower na každém znaku ve vzoru a na každém znaku ve vstupu. Místo toho se při sestrojení Regex provádí veškerá práce související s formátem písmen.
Regex teď podporuje rozsahy některých rozhraní API. V rámci této podpory byly přidány následující nové metody:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (a několik dalších přetížení)
Další informace o těchto a jiných vylepšeních naleznete v blogovém příspěvku o vylepšeních regulárních výrazů v .NET 7.
Knihovny .NET
V rozhraních API knihovny .NET bylo provedeno mnoho vylepšení. Některé jsou uvedeny v jiných vyhrazených částech tohoto článku. Některé další jsou shrnuté v následující tabulce.
Popis | API | Další informace |
---|---|---|
Podpora mikrosekund a nanosekund v TimeSpan, TimeOnly, DateTimea DateTimeOffset typech | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Nové DateTime přetížení konstruktoru - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Nové přetížení konstruktorových metod DateTimeOffset - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) -A jiní... |
Tato rozhraní API vám umožňují, že už nemusíte provádět výpočty s hodnotou "tick" pro určení mikrosekundových a nanosekundových hodnot. Další informace najdete v blogovém příspěvku .NET 7 Preview 4. |
Rozhraní API pro čtení, zápis, archivaci a extrahování archivů Tar | System.Formats.Tar | Další informace najdete v .NET 7 Preview 4 a .NET 7 Preview 6 blogových příspěvcích. |
Omezování rychlosti rozhraní API pro ochranu prostředku udržováním provozu na bezpečné úrovni | RateLimiter a další v balíčku NuGet System.Threading.RateLimiting | Další informace najdete v tématu Omezení rychlosti obslužné rutiny HTTP v rozhraní .NET a Oznámení o omezování rychlosti pro rozhraní .NET. |
Rozhraní API ke čtení všech dat z Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read může vrátit méně dat, než je v datovém proudu k dispozici. Nové metody ReadExactly čtou přesně požadovaný počet bajtů a nové metody ReadAtLeast čtou alespoň požadovaný počet bajtů. Další informace najdete v blogovém příspěvku .NET 7 Preview 5. |
Nové převaděče typů pro DateOnly , TimeOnly , Int128 , UInt128 a Half |
V jmenném prostoru System.ComponentModel: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Převaděče typů se často používají k převodu hodnotových typů na a z řetězce. Tato nová rozhraní API přidávají převaděče typů pro typy, které byly přidány v poslední době. |
Podpora metrik pro IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() umožňuje používat čítače událostí nebo rozhraní API metrik ke sledování statistik pro jednu nebo více mezipamětí paměti. Další informace najdete v blogovém příspěvku .NET 7 Preview 4. |
Rozhraní API pro získání a nastavení oprávnění k souborům unix | výčet - System.IO.UnixFileMode - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Další informace najdete v blogovém příspěvku .NET 7 Preview 7. |
Atribut označující, jaký druh syntaxe se očekává v řetězci | StringSyntaxAttribute | Můžete například určit, že parametr string očekává regulární výraz zadáním parametru [StringSyntax(StringSyntaxAttribute.Regex)] . |
Rozhraní API pro interakci s JavaScriptem při běhu v prohlížeči nebo v jiných architekturách WebAssembly. | System.Runtime.InteropServices.JavaScript | Aplikace v JavaScriptu můžou používat rozšířenou podporu WebAssembly v .NET 7 k opětovnému použití knihoven .NET z JavaScriptu. Další informace najdete v tématu Použití .NET z libovolné javascriptové aplikace v .NET 7. |
Pozorovatelnost
.NET 7 vylepšuje pozorovatelnosti. Pozorovatelnost vám pomůže pochopit stav vaší aplikace, jak se škáluje, a jak se zvyšuje technická složitost. .NET je implementace pozorovatelnosti primárně postavená na OpenTelemetry. Mezi vylepšení patří:
- Nová událost Activity.CurrentChanged, kterou můžete použít ke zjištění, kdy se kontext rozsahu spravovaného vlákna změní.
- Nové, výkonné enumerátorové metody pro vlastnosti Activity: EnumerateTagObjects(), EnumerateLinks()a EnumerateEvents().
Další informace najdete v blogovém příspěvku .NET 7 Preview 4.
.NET SDK
Sada .NET 7 SDK zlepšuje prostředí šablon rozhraní příkazového řádku. Umožňuje také publikování do kontejnerů a centrální správu balíčků pomocí NuGetu.
Šablony
V příkazu dotnet new
a vytváření šablon došlo k některým uvítacím vylepšením.
dotnet new
Příkaz rozhraní příkazového řádku dotnet new
, který vytvoří nový projekt, konfigurační soubor nebo řešení založené na šabloně, teď podporuje dokončení tabulátoru pro zkoumání:
- Dostupné názvy šablon
- Možnosti šablony
- Povolené hodnoty možností
Kromě toho, pro lepší shodu, install
, uninstall
, search
, list
a update
dílčí příkazy již nemají předponu --
.
Vytváření
Šablona omezení, nový koncept pro .NET 7, umožňuje definovat kontext, ve kterém jsou šablony povolené. Omezení pomáhají modulu šablon určit, které šablony by se měly zobrazovat v příkazech, jako je dotnet new list
. Šablonu můžete omezit na operační systém, hostitele modulu šablon (například dialogové okno .NET CLI nebo Nový projekt v sadě Visual Studio) a nainstalovanou úlohu. Omezení definujete v konfiguračním souboru šablony.
V konfiguračním souboru šablony teď můžete přidat poznámky k parametru šablony, protože umožňuje více hodnot. Například šablona web
umožňuje více forem ověřování.
Další informace najdete v blogovém příspěvku .NET 7 Preview 6.
Publikovat do kontejneru
Kontejnery představují jeden z nejjednodušších způsobů distribuce a provozování široké škály aplikací a služeb v cloudu. Image kontejnerů jsou nyní podporovaným výstupním typem sady .NET SDK a pomocí dotnet publish
můžete vytvářet kontejnerizované verze aplikací. Další informace o této funkci najdete v tématu Oznámení o integrované podpoře kontejneru pro sadu .NET SDK. Kurz najdete v Kontejnerovat aplikaci .NET s příkazem dotnet publish.
Centrální správa balíčků
Teď můžete spravovat běžné závislosti ve svých projektech z jednoho umístění pomocí funkce centrální správy balíčků NuGet (CPM). Pokud ho chcete povolit, přidáte soubor Directory.Packages.props do kořenového adresáře úložiště. V tomto souboru nastavte vlastnost MSBuild ManagePackageVersionsCentrally
na true
a přidejte verze pro běžnou závislost balíčku pomocí PackageVersion
položek. V jednotlivých souborech projektu pak můžete vynechat atributy Version
z libovolných položek PackageReference, které odkazují na centrálně spravované balíčky.
Další informace naleznete v tématu Centrální správa balíčků.
Generování zdrojového kódu pro P/Invoke
.NET 7 zavádí generátor kódu pro P/Invokes v jazyce C#. Generátor zdrojového kódu vyhledává LibraryImportAttribute na static
a partial
metodách pro spuštění generování maršalovacího kódu během kompilace. Generováním kódu pro marshaling při kompilaci není nutné generovat žádný IL stub za běhu, jak je tomu při použití DllImportAttribute. Generátor zdrojů zlepšuje výkon aplikace a také umožňuje, aby aplikace byla předem zkompilována (AOT). Další informace najdete v tématu Generování kódu pro vyvolání platformy a Použití vlastních zařazovačů v P/Invokes generovaných zdrojem.
Související verze
Tato část obsahuje informace o souvisejících produktech, které mají verze, které se shodují s verzí .NET 7.
Visual Studio 2022 verze 17.4
Další informace najdete v tématu Novinky v sadě Visual Studio 2022.
C# 11
C# 11 obsahuje podporu pro obecné matematické operace, nezpracované řetězcové literály, typy s omezením na úroveň souboru a další nové funkce. Další informace najdete v části Co je nového v C# 11.
F# 7
F# 7 pokračuje v cestě k jednoduššímu jazyku a zlepšení výkonu a spolupráce s novými funkcemi jazyka C#. Pro více informací se podívejte na Announcing F# 7.
.NET MAUI
.NET Multi-platform App UI (.NET MAUI) je multiplatformní rozhraní pro vytváření nativních mobilních a desktopových aplikací pomocí C# a XAML. Sjednocuje rozhraní API pro Android, iOS, macOS a Windows do jednoho rozhraní API. Informace o nejnovějších aktualizacích najdete v tématu Novinky v rozhraní .NET MAUI pro .NET 7.
ASP.NET Core
ASP.NET Core 7.0 zahrnuje middleware pro omezení rychlosti, zlepšení u minimálních rozhraní API a transkódování JSON gRPC. Informace o všech aktualizacích najdete v tématu Novinky v ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 zahrnuje podporu sloupců JSON nezávislou na poskytovateli, vylepšený výkon pro ukládání změn a vlastní šablony zpětné analýzy. Informace o všech aktualizacích najdete v tématu Co je nového v EF Core 7.0.
Windows Forms
Mnoho práce bylo věnováno Windows Forms pro .NET 7. Vylepšení byla provedena v následujících oblastech:
- Přístupnost
- Vysoká DPI a škálování
- Vazby dat
Další informace naleznete v tématu Co je nového ve Windows Forms v .NET 7.
WPF (Windows Presentation Foundation)
WPF v .NET 7 obsahuje řadu oprav chyb a vylepšení výkonu a přístupnosti. Další informace najdete v blogovém příspěvku Co je nového pro WPF v .NET 7 blogovém příspěvku.
Orleans
Orleans je multiplatformní architektura pro vytváření robustních a škálovatelných distribuovaných aplikací. Informace o nejnovějších aktualizacích pro Orleansnaleznete v tématu Migrace z Orleans 3.x na7.0 .
Pomocník pro upgrade .NET a CoreWCF
Pomocník pro upgrade .NET teď podporuje upgrade aplikací WCF na straně serveru na CoreWCF, což je komunitní port WCF na .NET (Core). Další informace najdete v tématu Upgrade serverového projektu WCF na CoreWCF.
ML.NET
ML.NET teď obsahuje rozhraní API pro klasifikaci textu, které usnadňuje trénování vlastních modelů klasifikace textu pomocí nejnovějších nejmodernějších technik hlubokého učení. Další informace najdete v blogových příspěvcích Co je nového v AutoML a nástrojích a Představujeme ML.NET rozhraní API pro klasifikaci textu.