Udostępnij za pośrednictwem


Co nowego w programie .NET Core 2.1

Platforma .NET Core 2.1 zawiera ulepszenia i nowe funkcje w następujących obszarach:

Narzędzia

Zestaw .NET Core 2.1 SDK (wersja 2.1.300), narzędzia dołączone do platformy .NET Core 2.1 zawierają następujące zmiany i ulepszenia:

Ulepszenia wydajności kompilacji

Głównym celem platformy .NET Core 2.1 jest poprawa wydajności czasu kompilacji, szczególnie w przypadku kompilacji przyrostowych. Te ulepszenia wydajności dotyczą zarówno kompilacji wiersza polecenia, jak i dotnet build kompilacji w programie Visual Studio. Niektóre obszary poprawy obejmują:

  • W przypadku rozpoznawania zasobów pakietu rozpoznawanie tylko zasobów używanych przez kompilację, a nie wszystkie zasoby.

  • Buforowanie odwołań do zestawów.

  • Korzystanie z długotrwałych serwerów kompilacji zestawu SDK, które są procesami obejmującymi poszczególne dotnet build wywołania. Eliminują potrzebę kompilowania dużych bloków kodu JIT za każdym razem, gdy dotnet build jest uruchamiany. Procesy serwera kompilacji można automatycznie zakończyć za pomocą następującego polecenia:

    dotnet buildserver shutdown
    

Nowe polecenia interfejsu wiersza polecenia

Wiele narzędzi, które były dostępne tylko dla poszczególnych projektów przy użyciu DotnetCliToolReference , są teraz dostępne jako część zestawu .NET Core SDK. Do tych narzędzi należą:

  • dotnet watch Udostępnia obserwatora systemu plików, który czeka na zmianę pliku przed wykonaniem wyznaczonego zestawu poleceń. Na przykład następujące polecenie automatycznie ponownie kompiluje bieżący projekt i generuje pełne dane wyjściowe za każdym razem, gdy w nim zmieni się plik:

    dotnet watch -- --verbose build
    

    Zwróć uwagę na -- opcję poprzedzającą --verbose tę opcję. Rozdziela opcje przekazywane bezpośrednio do dotnet watch polecenia z argumentów przekazywanych do procesu podrzędnego dotnet . Bez niego --verbose opcja ma zastosowanie do dotnet watch polecenia, a nie dotnet build polecenia.

    Aby uzyskać więcej informacji, zobacz Develop ASP.NET Core apps using dotnet watch (Tworzenie aplikacji platformy ASP.NET Core przy użyciu funkcji dotnet watch).

  • dotnet dev-certs generuje certyfikaty używane podczas programowania w aplikacjach ASP.NET Core i zarządza nimi.

  • dotnet user-secrets zarządza wpisami tajnymi w magazynie wpisów tajnych użytkownika w aplikacjach ASP.NET Core.

  • dotnet sql-cache Tworzy tabelę i indeksy w bazie danych programu Microsoft SQL Server, która ma być używana do buforowania rozproszonego.

  • dotnet ef to narzędzie do zarządzania bazami danych, DbContext obiektami i migracjami w aplikacjach Platformy Entity Framework Core. Aby uzyskać więcej informacji, zobacz Narzędzia wiersza polecenia platformy .NET platformy EF Core.

Narzędzia globalne

Platforma .NET Core 2.1 obsługuje narzędzia globalne — czyli niestandardowe narzędzia dostępne globalnie w wierszu polecenia. Model rozszerzalności w poprzednich wersjach platformy .NET Core udostępniał niestandardowe narzędzia dla poszczególnych projektów tylko przy użyciu polecenia DotnetCliToolReference.

Aby zainstalować narzędzie globalne, należy użyć polecenia dotnet tool install . Na przykład:

dotnet tool install -g dotnetsay

Po zainstalowaniu narzędzie można uruchomić z poziomu wiersza polecenia, określając nazwę narzędzia. Aby uzyskać więcej informacji, zobacz Omówienie narzędzi globalnych platformy .NET Core.

Zarządzanie narzędziami za dotnet tool pomocą polecenia

W zestawie SDK platformy .NET Core 2.1 wszystkie operacje narzędzi używają dotnet tool polecenia . Dostępne są następujące opcje:

Przerzuć do przodu

Wszystkie aplikacje platformy .NET Core, począwszy od platformy .NET Core 2.0, są automatycznie przenoszone do najnowszej wersji pomocniczej zainstalowanej w systemie.

Począwszy od platformy .NET Core 2.0, jeśli wersja platformy .NET Core, z którą utworzono aplikację, nie jest obecna w czasie wykonywania, aplikacja jest uruchamiana automatycznie w najnowszej zainstalowanej wersji pomocniczej platformy .NET Core. Innymi słowy, jeśli aplikacja została skompilowana przy użyciu platformy .NET Core 2.0, a platforma .NET Core 2.0 nie jest obecna w systemie hosta, ale jest to .NET Core 2.1, aplikacja działa z platformą .NET Core 2.1.

Ważne

To zachowanie przesyłania zbiorczego nie ma zastosowania do wersji zapoznawczych. Domyślnie nie dotyczy to również głównych wersji, ale można to zmienić przy użyciu poniższych ustawień.

To zachowanie można zmodyfikować, zmieniając ustawienie dla opcji roll-forward bez platformy udostępnionej kandydata. Dostępne ustawienia to:

  • 0 — wyłącz zachowanie wycofywania wersji pomocniczej. Dzięki temu ustawieniu aplikacja utworzona dla platformy .NET Core 2.0.0 będzie przekazywać do platformy .NET Core 2.0.1, ale nie do platformy .NET Core 2.2.0 lub .NET Core 3.0.0.
  • 1 — włącz zachowanie wycofywania wersji pomocniczej. Jest to wartość domyślna ustawienia. Dzięki temu ustawieniu aplikacja utworzona dla platformy .NET Core 2.0.0 będzie przekazywać do platformy .NET Core 2.0.1 lub .NET Core 2.2.0, w zależności od tego, która z nich jest zainstalowana, ale nie będzie przekazywać do platformy .NET Core 3.0.0.
  • 2 — włącz zachowanie wycofywania wersji pomocniczej i głównej. W przypadku ustawienia są brane pod uwagę nawet różne wersje główne, więc aplikacja utworzona dla platformy .NET Core 2.0.0 będzie przekazywać do platformy .NET Core 3.0.0.

To ustawienie można zmodyfikować na dowolny z trzech sposobów:

Wprowadzanie wersji poprawek jest niezależne od tego ustawienia i jest wykonywane po zastosowaniu potencjalnej wersji pomocniczej lub głównej.

Wdrożenie

Samodzielna obsługa aplikacji

dotnet publish teraz publikuje aplikacje samodzielne z wersją środowiska uruchomieniowego usługi. Podczas publikowania aplikacji samodzielnej przy użyciu zestawu .NET Core 2.1 SDK (wersja 2.1.300) aplikacja zawiera najnowszą wersję środowiska uruchomieniowego usługi znaną przez ten zestaw SDK. Po uaktualnieniu do najnowszego zestawu SDK opublikujesz najnowszą wersję środowiska uruchomieniowego platformy .NET Core. Dotyczy to środowisk uruchomieniowych .NET Core 1.0 i nowszych.

Samodzielne publikowanie opiera się na wersjach środowiska uruchomieniowego w NuGet.org. Nie musisz mieć środowiska uruchomieniowego usługi na maszynie.

Korzystając z zestawu .NET Core 2.0 SDK, aplikacje samodzielne są publikowane przy użyciu środowiska uruchomieniowego platformy .NET Core 2.0.0, chyba że za pośrednictwem RuntimeFrameworkVersion właściwości określono inną wersję. Dzięki temu nowemu zachowaniu nie trzeba już ustawiać tej właściwości, aby wybrać wyższą wersję środowiska uruchomieniowego dla aplikacji samodzielnej. Najprostszym podejściem w przyszłości jest zawsze publikowanie przy użyciu zestawu .NET Core 2.1 SDK (wersja 2.1.300).

Aby uzyskać więcej informacji, zobacz Samodzielne wdrażanie środowiska uruchomieniowego wdrażania.

Pakiet zgodności systemu Windows

W przypadku przenoszenia istniejącego kodu z programu .NET Framework do platformy .NET Core można użyć pakietu zgodności systemu Windows. Zapewnia dostęp do 20 000 więcej interfejsów API niż są dostępne na platformie .NET Core. Te interfejsy API obejmują typy w System.Drawing przestrzeni nazw, klasę, EventLog usługę WMI, liczniki wydajności, usługi systemu Windows oraz typy rejestru i składowe systemu Windows.

Ulepszenia kompilatora JIT

Platforma .NET Core zawiera nową technologię kompilatora JIT o nazwie kompilacja warstwowa (nazywana również optymalizacją adaptacyjną), która może znacznie poprawić wydajność. Kompilacja warstwowa to ustawienie zgody.

Jednym z ważnych zadań wykonywanych przez kompilator JIT jest optymalizacja wykonywania kodu. Jednak w przypadku mało używanych ścieżek kodu kompilator może poświęcić więcej czasu na optymalizację kodu niż środowisko uruchomieniowe spędza czas na uruchamianiu niezoptymalizowanego kodu. Kompilacja warstwowa wprowadza dwa etapy kompilacji JIT:

  • Pierwsza warstwa, która generuje kod tak szybko, jak to możliwe.

  • Druga warstwa, która generuje zoptymalizowany kod dla tych metod, które są często wykonywane. Druga warstwa kompilacji jest wykonywana równolegle w celu zwiększenia wydajności.

Możesz wyrazić zgodę na kompilację warstwową na jeden z dwóch sposobów.

  • Aby użyć kompilacji warstwowej we wszystkich projektach korzystających z zestawu .NET Core 2.1 SDK, ustaw następującą zmienną środowiskową:

    COMPlus_TieredCompilation="1"
    
  • Aby użyć kompilacji warstwowej dla poszczególnych projektów, dodaj <TieredCompilation> właściwość do <PropertyGroup> sekcji pliku projektu MSBuild, jak pokazano w poniższym przykładzie:

    <PropertyGroup>
        <!-- other property definitions -->
    
        <TieredCompilation>true</TieredCompilation>
    </PropertyGroup>
    

Zmiany w interfejsie API

Span<T> i Memory<T>

Platforma .NET Core 2.1 zawiera niektóre nowe typy, które znacznie wydajniej współpracują z tablicami i innymi typami pamięci. Nowe typy obejmują:

Bez tych typów podczas przekazywania takich elementów jak część tablicy lub sekcji buforu pamięci należy utworzyć kopię niektórych części danych przed przekazaniem jej do metody. Te typy zapewniają wirtualny widok tych danych, który eliminuje konieczność dodatkowej alokacji pamięci i operacji kopiowania.

W poniższym przykładzie użyto Span<T> klasy i Memory<T> , aby udostępnić wirtualny widok 10 elementów tablicy.

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

Kompresja Brotli

Platforma .NET Core 2.1 dodaje obsługę kompresji Brotli i dekompresji. Brotli to algorytm kompresji bezstratnej ogólnego przeznaczenia, który jest zdefiniowany w dokumencie RFC 7932 i jest obsługiwany przez większość przeglądarek internetowych i głównych serwerów internetowych. Można użyć klasy opartej na System.IO.Compression.BrotliStream strumieniu lub klas opartych na System.IO.Compression.BrotliEncoder wysokiej wydajności i System.IO.Compression.BrotliDecoder klas. Poniższy przykład ilustruje kompresję z klasą BrotliStream :

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

Zachowanie BrotliStream jest takie samo jak DeflateStream i GZipStream, co ułatwia konwertowanie kodu wywołującego te interfejsy API na BrotliStream.

Nowe interfejsy API kryptografii i ulepszenia kryptografii

Platforma .NET Core 2.1 zawiera liczne ulepszenia interfejsów API kryptografii:

Ulepszenia gniazd

Platforma .NET Core zawiera nowy typ, System.Net.Http.SocketsHttpHandleri przepisany System.Net.Http.HttpMessageHandlerelement , który stanowi podstawę interfejsów API sieci wyższego poziomu. System.Net.Http.SocketsHttpHandlerna przykład jest podstawą implementacji HttpClient . W poprzednich wersjach platformy .NET Core interfejsy API wyższego poziomu były oparte na implementacjach sieci natywnych.

Implementacja gniazd wprowadzona na platformie .NET Core 2.1 ma wiele zalet:

  • Znacząca poprawa wydajności w porównaniu z poprzednią implementacją.

  • Eliminacja zależności platformy, co upraszcza wdrażanie i obsługę.

  • Spójne zachowanie na wszystkich platformach .NET Core.

SocketsHttpHandler to domyślna implementacja na platformie .NET Core 2.1. Można jednak skonfigurować aplikację tak, aby korzystała ze starszej HttpClientHandler klasy, wywołując metodę AppContext.SetSwitch :

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", False)

Możesz również użyć zmiennej środowiskowej, aby zrezygnować z używania implementacji gniazd opartych na .SocketsHttpHandler W tym celu ustaw wartość DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER false na wartość lub 0.

W systemie Windows można również użyć System.Net.Http.WinHttpHandlerklasy , która opiera się na natywnej implementacji lub SocketsHttpHandler klasie, przekazując wystąpienie klasy do konstruktora HttpClient .

W systemach Linux i macOS można skonfigurować HttpClient tylko dla poszczególnych procesów. W systemie Linux należy wdrożyć bibliotekę libcurl , jeśli chcesz użyć starej HttpClient implementacji. (Jest on instalowany przy użyciu platformy .NET Core 2.0).

Zmiany powodujące niezgodność

Aby uzyskać informacje o zmianach powodujących niezgodność, zobacz Istotne zmiany dotyczące migracji z wersji 2.0 do 2.1.

Zobacz też