Sdílet prostřednictvím


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ém dotnet 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římo dotnet watch příkazu z argumentů předaných do podřízeného dotnet procesu. Bez něj se --verbose tato možnost vztahuje na dotnet watch příkaz, nikoli na dotnet 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:

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:

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.

Viz také