Co je nového v .NET Core 2.1
.NET Core 2.1 zahrnuje vylepšení a nové funkce v následujících oblastech:
Nástroje
Sada .NET Core 2.1 SDK (verze 2.1.300) obsahuje nástroje, které jsou součástí .NET Core 2.1, následující změny a vylepšení:
Vylepšení výkonu sestavení
Hlavním cílem .NET Core 2.1 je zlepšení výkonu v době sestavení, zejména u přírůstkových sestavení. Tato vylepšení výkonu platí pro sestavení příkazového řádku používajících dotnet build
i pro sestavení v sadě Visual Studio. Mezi jednotlivé oblasti zlepšení patří:
V případě řešení prostředků balíčku přeložíte pouze prostředky používané sestavením místo všech prostředků.
Ukládání odkazů na sestavení do mezipaměti
Použití dlouhotrvajících buildových serverů sady SDK, což jsou procesy, které se nacházejí napříč jednotlivými
dotnet build
vyvoláním. Eliminují nutnost kompilace velkých bloků kódu JIT při každémdotnet build
spuštění. Procesy sestavení serveru je možné automaticky ukončit pomocí následujícího příkazu:dotnet buildserver shutdown
Nové příkazy rozhraní příkazového řádku
V rámci sady .NET Core SDK je teď k dispozici celá řada nástrojů, které byly k dispozici pouze na základě DotnetCliToolReference
jednotlivých projektů. Mezi tyto nástroje patří:
dotnet watch
poskytuje sledovací proces systému souborů, který čeká na změnu souboru před spuštěním určené sady příkazů. Například následující příkaz automaticky znovu sestaví aktuální projekt a při každé změně souboru v něm vygeneruje podrobný výstup:dotnet watch -- --verbose build
--
Všimněte si možnosti, která předchází--verbose
této možnosti. Odděluje možnosti předané přímodotnet watch
příkazu z argumentů předaných do podřízenéhodotnet
procesu. Bez něj se--verbose
tato možnost vztahuje nadotnet watch
příkaz, nikoli nadotnet build
příkaz.Další informace najdete v tématu Vývoj aplikací ASP.NET Core pomocí dotnet watch.
dotnet dev-certs
generuje a spravuje certifikáty používané při vývoji v aplikacích ASP.NET Core.dotnet user-secrets
spravuje tajné kódy v úložišti tajných kódů uživatele v aplikacích ASP.NET Core.dotnet sql-cache
vytvoří tabulku a indexy v databázi Microsoft SQL Serveru, která se použije pro distribuované ukládání do mezipaměti.dotnet ef
je nástroj pro správu databází, DbContext objektů a migrací v aplikacích Entity Framework Core. Další informace najdete v tématu NÁSTROJE příkazového řádku EF Core .NET.
Globální nástroje
.NET Core 2.1 podporuje globální nástroje – to znamená vlastní nástroje, které jsou dostupné globálně z příkazového řádku. Model rozšiřitelnosti v předchozích verzích .NET Core zpřístupnil vlastní nástroje pro jednotlivé projekty pouze pomocí DotnetCliToolReference
.
K instalaci globálního nástroje použijte příkaz dotnet tool install . Příklad:
dotnet tool install -g dotnetsay
Po instalaci lze nástroj spustit z příkazového řádku zadáním názvu nástroje. Další informace najdete v tématu .NET Core Global Tools – přehled.
Správa nástrojů pomocí dotnet tool
příkazu
V sadě .NET Core 2.1 SDK používají dotnet tool
příkaz všechny operace nástrojů. Existují tyto možnosti:
dotnet tool install
a nainstalujte nástroj.dotnet tool update
pro odinstalaci a přeinstalaci nástroje, který ho efektivně aktualizuje.dotnet tool list
a zobrazí se seznam aktuálně nainstalovaných nástrojů.dotnet tool uninstall
pro odinstalaci aktuálně nainstalovaných nástrojů.
Vrácení vpřed
Všechny aplikace .NET Core začínající na .NET Core 2.0 se automaticky přepojí na nejnovější podverzi nainstalovanou v systému.
Počínaje .NET Core 2.0, pokud verze .NET Core, se kterou byla aplikace vytvořená, není v době běhu přítomna, aplikace se automaticky spustí s nejnovější nainstalovanou podverzi .NET Core. Jinými slovy, pokud je aplikace vytvořená pomocí .NET Core 2.0 a .NET Core 2.0 není k dispozici v hostitelském systému, ale .NET Core 2.1 je, aplikace běží s .NET Core 2.1.
Důležité
Toto chování se nevztahuje na verze Preview. Ve výchozím nastavení se také nevztahuje na hlavní verze, ale můžete to změnit pomocí níže uvedených nastavení.
Toto chování můžete změnit tak, že změníte nastavení pro zavedení pro žádné kandidátské sdílené rozhraní. K dispozici jsou následující nastavení:
0
- zakažte chování vrácení podverze vpřed. Díky tomuto nastavení se aplikace vytvořená pro .NET Core 2.0.0 přesune na .NET Core 2.0.1, ale ne na .NET Core 2.2.0 nebo .NET Core 3.0.0.1
– povolte chování vrácení podverze vpřed. Toto je výchozí hodnota nastavení. Díky tomuto nastavení se aplikace vytvořená pro .NET Core 2.0.0 přesune na .NET Core 2.0.1 nebo .NET Core 2.2.0 v závislosti na tom, který z nich je nainstalovaný, ale nepřejde na .NET Core 3.0.0.2
– povolte chování vrácení podverze a hlavní verze. Pokud je sada nastavená, budou se zvažovat i různé hlavní verze, takže aplikace vytvořená pro .NET Core 2.0.0 se vrátí do .NET Core 3.0.0.
Toto nastavení můžete upravit některým ze tří způsobů:
Nastavte proměnnou
DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX
prostředí na požadovanou hodnotu.Do souboru .runtimeconfig.json přidejte následující řádek s požadovanou hodnotou:
"rollForwardOnNoCandidateFx" : 0
Při použití rozhraní příkazového řádku .NET přidejte následující možnost s požadovanou hodnotou do příkazu .NET, například
run
:dotnet run --rollForwardOnNoCandidateFx=0
Vrácení verze opravy je nezávislé na tomto nastavení a provádí se po použití potenciální dílčí verze nebo vrácení hlavní verze vpřed.
Nasazení
Samoobslužná údržba aplikací
dotnet publish
nyní publikuje samostatné aplikace s verzí obsluhované modulu runtime. Když publikujete samostatnou aplikaci se sadou .NET Core 2.1 SDK (v 2.1.300), vaše aplikace obsahuje nejnovější verzi modulu runtime, kterou tato sada SDK zná. Při upgradu na nejnovější sadu SDK publikujete nejnovější verzi modulu runtime .NET Core. To platí pro moduly runtime .NET Core 1.0 a novější.
Publikování v samostatném prostředí závisí na verzích modulu runtime na NuGet.org. Na svém počítači nemusíte mít obsluhovaný modul runtime.
Pomocí sady .NET Core 2.0 SDK se samostatné aplikace publikují s modulem runtime .NET Core 2.0.0, pokud není zadána jiná verze prostřednictvím RuntimeFrameworkVersion
vlastnosti. S tímto novým chováním už nebudete muset tuto vlastnost nastavit, abyste pro samostatnou aplikaci vybrali vyšší verzi modulu runtime. Nejjednodušším přístupem je vždy publikovat pomocí sady .NET Core 2.1 SDK (verze 2.1.300).
Další informace najdete v části Místní modul runtime nasazení.
Windows Compatibility Pack
Pokud portujete existující kód z rozhraní .NET Framework do .NET Core, můžete použít sadu Windows Compatibility Pack. Poskytuje přístup k 20 000 více rozhraním API, než je k dispozici v .NET Core. Tato rozhraní API zahrnují typy v System.Drawing oboru názvů, třídě, EventLog rozhraní WMI, čítačích výkonu, službách Windows a typech a členech registru Windows.
Vylepšení kompilátoru JIT
.NET Core zahrnuje novou technologii kompilátoru JIT označovanou jako vrstvené kompilace (označovaná také jako adaptivní optimalizace), která může výrazně zlepšit výkon. Vrstvené kompilace je nastavení výslovného souhlasu.
Jednou z důležitých úloh prováděných kompilátorem JIT je optimalizace provádění kódu. U málo používaných cest kódu však kompilátor může strávit více času optimalizací kódu, než modul runtime stráví spuštěním neoptimalizovaného kódu. Vrstvené kompilace představuje dvě fáze kompilace JIT:
První úroveň, která generuje kód co nejrychleji.
Druhá úroveň, která generuje optimalizovaný kód pro metody, které se spouští často. Druhá úroveň kompilace se provádí paralelně pro zvýšení výkonu.
K vrstvené kompilaci se můžete přihlásit jedním ze dvou způsobů.
Pokud chcete použít vrstvenou kompilaci ve všech projektech, které používají sadu .NET Core 2.1 SDK, nastavte následující proměnnou prostředí:
COMPlus_TieredCompilation="1"
Pokud chcete použít vrstvené kompilace pro jednotlivé projekty, přidejte
<TieredCompilation>
vlastnost do<PropertyGroup>
oddílu souboru projektu MSBuild, jak ukazuje následující příklad:<PropertyGroup> <!-- other property definitions --> <TieredCompilation>true</TieredCompilation> </PropertyGroup>
Změny rozhraní API
Span<T>
a Memory<T>
.NET Core 2.1 obsahuje některé nové typy, které usnadňují práci s poli a dalšími typy paměti. Mezi nové typy patří:
Bez těchto typů musíte při předávání takových položek jako část pole nebo oddílu vyrovnávací paměti vytvořit kopii některých částí dat před jejich předáním metodě. Tyto typy poskytují virtuální zobrazení těchto dat, která eliminují potřebu dalších operací přidělení paměti a kopírování.
Následující příklad používá Span<T> a Memory<T> instance k poskytnutí virtuálního zobrazení 10 prvků pole.
using System;
class Program
{
static void Main()
{
int[] numbers = new int[100];
for (int i = 0; i < 100; i++)
{
numbers[i] = i * 2;
}
var part = new Span<int>(numbers, start: 10, length: 10);
foreach (var value in part)
Console.Write($"{value} ");
}
}
// The example displays the following output:
// 20 22 24 26 28 30 32 34 36 38
Module Program
Sub Main()
Dim numbers As Integer() = New Integer(99) {}
For i As Integer = 0 To 99
numbers(i) = i * 2
Next
Dim part = New Memory(Of Integer)(numbers, start:=10, length:=10)
For Each value In part.Span
Console.Write($"{value} ")
Next
End Sub
End Module
' The example displays the following output:
' 20 22 24 26 28 30 32 34 36 38
Komprese Brotli
.NET Core 2.1 přidává podporu komprese a dekomprese Brotli. Brotli je univerzální bezztrátový algoritmus komprese, který je definován v RFC 7932 a je podporován většinou webových prohlížečů a hlavních webových serverů. Můžete použít streamovou System.IO.Compression.BrotliStream třídu nebo vysoce výkonné třídy založené na System.IO.Compression.BrotliEncoder rozsahu a System.IO.Compression.BrotliDecoder třídy. Následující příklad ilustruje kompresi s BrotliStream třídou:
public static Stream DecompressWithBrotli(Stream toDecompress)
{
MemoryStream decompressedStream = new MemoryStream();
using (BrotliStream decompressionStream = new BrotliStream(toDecompress, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedStream);
}
decompressedStream.Position = 0;
return decompressedStream;
}
Public Function DecompressWithBrotli(toDecompress As Stream) As Stream
Dim decompressedStream As New MemoryStream()
Using decompressionStream As New BrotliStream(toDecompress, CompressionMode.Decompress)
decompressionStream.CopyTo(decompressedStream)
End Using
decompressedStream.Position = 0
Return decompressedStream
End Function
Chování BrotliStream je stejné jako DeflateStream a GZipStream, což usnadňuje převod kódu, který volá tato rozhraní API do BrotliStream.
Nová rozhraní API kryptografie a vylepšení kryptografie
.NET Core 2.1 zahrnuje řadu vylepšení rozhraní API kryptografie:
System.Security.Cryptography.Pkcs.SignedCms je k dispozici v balíčku System.Security.Cryptography.Pkcs. Implementace je stejná jako SignedCms třída v rozhraní .NET Framework.
Nová přetížení X509Certificate.GetCertHash a X509Certificate.GetCertHashString metody přijímají identifikátor hash algoritmu, který volajícím umožňuje získat hodnoty kryptografického otisku certifikátu pomocí jiných algoritmů než SHA-1.
Nová Span<T>kryptografická rozhraní API založená na šifrování jsou k dispozici pro hashování, HMAC, generování kryptografických náhodných čísel, asymetrické generování podpisů, zpracování asymetrických podpisů a šifrování RSA.
Výkon se System.Security.Cryptography.Rfc2898DeriveBytes zlepšil o přibližně 15 % pomocí implementace založené na Span<T>této implementaci.
Nová System.Security.Cryptography.CryptographicOperations třída obsahuje dvě nové metody:
FixedTimeEquals trvá pevnou dobu, než se vrátí pro všechny dva vstupy se stejnou délkou, což je vhodné pro použití v kryptografickém ověřování, aby nedocházelo k přispívání k informacím o časování na straně kanálu.
ZeroMemory je rutina mazání paměti, kterou nelze optimalizovat.
Statická RandomNumberGenerator.Fill metoda vyplní Span<T> náhodné hodnoty.
Tato funkce je teď podporovaná v Linuxu System.Security.Cryptography.Pkcs.EnvelopedCms a macOS.
Elliptic-Curve Diffie-Hellman (ECDH) je nyní k dispozici v rodině System.Security.Cryptography.ECDiffieHellman tříd. Povrchová oblast je stejná jako v rozhraní .NET Framework.
Instance vrácená RSA.Create pomocí OAEP může šifrovat nebo dešifrovat pomocí algoritmu HASH SHA-2 a také vygenerovat nebo ověřit podpisy pomocí RSA-PSS.
Vylepšení soketů
.NET Core obsahuje nový typ System.Net.Http.SocketsHttpHandlera přepsaný System.Net.Http.HttpMessageHandlerpřepis, který tvoří základ rozhraní API pro sítě vyšší úrovně. System.Net.Http.SocketsHttpHandler, například je základem HttpClient implementace. V předchozích verzích .NET Core byla rozhraní API vyšší úrovně založená na nativních síťových implementacích.
Implementace soketů zavedená v .NET Core 2.1 má řadu výhod:
Významné zlepšení výkonu v porovnání s předchozí implementací.
Eliminace závislostí platforem, což zjednodušuje nasazení a údržbu.
Konzistentní chování napříč všemi platformami .NET Core
SocketsHttpHandler je výchozí implementace v .NET Core 2.1. Aplikaci ale můžete nakonfigurovat tak, aby používala starší HttpClientHandler třídu voláním AppContext.SetSwitch metody:
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", False)
Proměnnou prostředí můžete také použít k odhlášení z používání implementací soketů založených na SocketsHttpHandler. Uděláte to tak, že nastavíte DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER
hodnotu buď false
na hodnotu 0, nebo na hodnotu 0.
Ve Windows můžete také zvolit použití System.Net.Http.WinHttpHandler, která spoléhá na nativní implementaci nebo SocketsHttpHandler třídu předáním instance třídy konstruktoru HttpClient .
V Linuxu a macOS můžete nakonfigurovat HttpClient pouze jednotlivé procesy. Pokud chcete použít starou HttpClient implementaci, musíte v Linuxu nasadit knihovnu libcurl. (Instaluje se s .NET Core 2.0.)
Změny způsobující chyby
Informace o zásadních změnách najdete v tématu Zásadní změny migrace z verze 2.0 na 2.1.