Megosztás a következőn keresztül:


A .NET Core 2.1 újdonságai

A .NET Core 2.1 a következő területeken tartalmaz fejlesztéseket és új funkciókat:

Eszközök

A .NET Core 2.1 SDK (v 2.1.300), a .NET Core 2.1-hez mellékelt eszközkészlet a következő módosításokat és fejlesztéseket tartalmazza:

Teljesítménybeli fejlesztések készítése

A .NET Core 2.1 fő témája a buildidő teljesítményének javítása, különösen növekményes buildek esetében. Ezek a teljesítménybeli fejlesztések mind a parancssori buildekre dotnet build , mind a Visual Studióban történő buildekre vonatkoznak. A fejlesztés egyes területei a következők:

  • A csomageszköz-feloldáshoz az összes eszköz helyett csak a build által használt eszközöket oldja fel.

  • Szerelvényhivatkozások gyorsítótárazása.

  • Hosszú ideig futó SDK-buildkiszolgálók használata, amelyek az egyes dotnet build meghívásokra kiterjedő folyamatok. Kiküszöbölik a nagy kódblokkok JIT-fordításának szükségességét minden futtatáskor dotnet build . A buildkiszolgálói folyamatok automatikusan leállíthatók a következő paranccsal:

    dotnet buildserver shutdown
    

Új parancssori felületi parancsok

A .NET Core SDK részeként számos olyan eszköz érhető el, amelyek csak projektenkénti alapon DotnetCliToolReference voltak elérhetők. Ezek az eszközök a következőket foglalják magukban:

  • dotnet watch egy fájlrendszerfigyelőt biztosít, amely megvárja, amíg egy fájl megváltozik, mielőtt végrehajt egy kijelölt parancskészletet. A következő parancs például automatikusan újraépíti az aktuális projektet, és részletes kimenetet hoz létre, amikor egy fájl megváltozik:

    dotnet watch -- --verbose build
    

    Jegyezze fel a -- beállítást megelőző --verbose beállítást. Elválasztja a közvetlenül a dotnet watch parancsnak átadott beállításokat a gyermekfolyamatnak dotnet átadott argumentumoktól. Nélküle a --verbose beállítás a dotnet watch parancsra vonatkozik, nem a parancsra dotnet build .

    További információ: ASP.NET Core-alkalmazások fejlesztése dotnet watch használatával.

  • dotnet dev-certs a ASP.NET Core-alkalmazások fejlesztése során használt tanúsítványokat generál és kezel.

  • dotnet user-secrets kezeli a titkos kulcsokat egy felhasználói titkos kódtárban ASP.NET Core-alkalmazásokban.

  • dotnet sql-cache létrehoz egy táblát és indexeket egy Microsoft SQL Server-adatbázisban, amelyet az elosztott gyorsítótárazáshoz kell használni.

  • dotnet ef Az Entity Framework Core-alkalmazások adatbázisainak, DbContext objektumainak és migrálásainak kezelésére szolgáló eszköz. További információ: EF Core .NET parancssori eszközök.

Globális eszközök

A .NET Core 2.1 támogatja a Globális eszközöket , vagyis a parancssorból globálisan elérhető egyéni eszközöket. A .NET Core korábbi verzióiban használt bővíthetőségi modell az egyéni eszközöket projektenként csak a használatával DotnetCliToolReferencetette elérhetővé.

Globális eszköz telepítéséhez használja a dotnet eszköz telepítési parancsát. Példa:

dotnet tool install -g dotnetsay

A telepítés után az eszköz az eszköz nevének megadásával futtatható a parancssorból. További információ: .NET Core Global Tools – áttekintés.

Eszközkezelés a dotnet tool paranccsal

A .NET Core 2.1 SDK-ban minden eszközművelet használja a dotnet tool parancsot. Ehhez a következő lehetőségek állnak rendelkezésre:

Előretekerés

A .NET Core 2.0-val kezdődő összes .NET Core-alkalmazás automatikusan a rendszeren telepített legújabb alverzióra kerül.

A .NET Core 2.0-tól kezdve, ha a .NET Core azon verziója, amellyel az alkalmazás készült, nem jelenik meg futásidőben, az alkalmazás automatikusan a .NET Core legújabb telepített alverziójával fut. Más szóval, ha egy alkalmazás a .NET Core 2.0-val készült, és a .NET Core 2.0 nincs jelen a gazdarendszeren, de a .NET Core 2.1 az, az alkalmazás a .NET Core 2.1-tel fut.

Fontos

Ez a bevezetési viselkedés nem vonatkozik az előzetes verziókra. Alapértelmezés szerint a fő kiadásokra sem vonatkozik, de ez az alábbi beállításokkal módosítható.

Ezt a viselkedést úgy módosíthatja, hogy nem jelölt megosztott keretrendszeren módosítja a roll-forward beállítást. Az elérhető beállítások a következők:

  • 0 - letilthatja az alverziók továbbgördítési viselkedését. Ezzel a beállítással a .NET Core 2.0.0-hoz készült alkalmazás a .NET Core 2.0.1-be kerül, a .NET Core 2.2.0-ra vagy a .NET Core 3.0.0-ra nem.
  • 1 - engedélyezi az alverziók továbbgördítési viselkedését. Ez a beállítás alapértelmezett értéke. Ezzel a beállítással a .NET Core 2.0.0-s verziójához készült alkalmazás a .NET Core 2.0.1 vagy a .NET Core 2.2.0 verzióra kerül, attól függően, hogy melyik telepítve van, de nem fog a .NET Core 3.0.0-s verziójára lépni.
  • 2 - engedélyezi az alverziók és főverziók roll-forward viselkedését. Ha be van állítva, akkor a rendszer még a különböző főverziókat is figyelembe veszi, így a .NET Core 2.0.0-hoz készült alkalmazás a .NET Core 3.0.0-ra fog átgördülni.

Ezt a beállítást háromféleképpen módosíthatja:

  • Állítsa a DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX környezeti változót a kívánt értékre.

  • Adja hozzá a következő sort a kívánt értékkel a .runtimeconfig.json fájlhoz:

    "rollForwardOnNoCandidateFx" : 0
    
  • A .NET CLI használatakor adja hozzá a következő lehetőséget a kívánt értékkel egy .NET-parancshoz, példáulrun:

    dotnet run --rollForwardOnNoCandidateFx=0
    

A javítások verziófrissítése független ettől a beállítástól, és az esetleges kisebb vagy főverzió-bevezetés alkalmazása után történik.

Telepítés

Önálló alkalmazás-karbantartás

dotnet publish Mostantól önkiszolgáló alkalmazásokat tesz közzé egy szervizelt futtatókörnyezeti verzióval. Ha önkiszolgáló alkalmazást tesz közzé a .NET Core 2.1 SDK-val (v 2.1.300), az alkalmazás tartalmazza az SDK által ismert legújabb szolgáltatásalapú futtatókörnyezeti verziót. A legújabb SDK-ra való frissítéskor a .NET Core futtatókörnyezet legújabb verziójával fog közzétenni. Ez a .NET Core 1.0-s és újabb futtatókörnyezetekre vonatkozik.

Az önálló közzététel az NuGet.org futtatókörnyezeti verzióira támaszkodik. Nincs szükség a szervizelt futtatókörnyezetre a gépen.

A .NET Core 2.0 SDK használatával a rendszer a .NET Core 2.0.0 futtatókörnyezettel teszi közzé a saját alkalmazásokat, kivéve, ha a RuntimeFrameworkVersion tulajdonságon keresztül más verziót ad meg. Ezzel az új viselkedéssel többé nem kell beállítania ezt a tulajdonságot, hogy egy önálló alkalmazáshoz egy magasabb futtatókörnyezeti verziót válasszon. A legegyszerűbb módszer a .NET Core 2.1 SDK-val való közzététel (v 2.1.300).

További információ: Önálló üzembehelyezési futtatókörnyezeti visszaállítás.

Windows kompatibilitási csomag

Ha a meglévő kódot a .NET-keretrendszer a .NET Core-ba portolja, használhatja a Windows kompatibilitási csomagját. A .NET Core-ban elérhetőnél 20 000-nél több API-hoz biztosít hozzáférést. Ezek az API-k a névtérben, az osztályban, a System.Drawing WMI-ben, a EventLog teljesítményszámlálókban, a Windows-szolgáltatásokban, valamint a Windows beállításjegyzék-típusaiban és tagjaiban találhatók.

JIT-fordító fejlesztései

A .NET Core tartalmaz egy új, rétegzett fordításnak (más néven adaptív optimalizálásnak) nevezett JIT-fordítótechnológiát, amely jelentősen javíthatja a teljesítményt. A rétegzett fordítás egy bejelentkezési beállítás.

A JIT-fordító egyik fontos feladata a kódvégrehajtás optimalizálása. A kevésbé használt kódútvonalak esetében azonban a fordító több időt tölthet a kód optimalizálásával, mint amennyit a futtatókörnyezet nem optimális kód futtatásával tölt. A rétegzett fordítás a JIT-fordítás két szakaszát mutatja be:

  • Első szint, amely a lehető leggyorsabban generál kódot.

  • Egy második szint, amely optimalizált kódot hoz létre a gyakran végrehajtott metódusokhoz. A második fordítási szint párhuzamosan történik a jobb teljesítmény érdekében.

Kétféleképpen választhatja a rétegzett fordítást.

  • Ha a .NET Core 2.1 SDK-t használó összes projektben rétegzett fordítást szeretne használni, állítsa be a következő környezeti változót:

    COMPlus_TieredCompilation="1"
    
  • Ha projektenként szeretne rétegzett fordítást használni, adja hozzá a <TieredCompilation> tulajdonságot az <PropertyGroup> MSBuild projektfájl szakaszához, ahogyan az alábbi példa is mutatja:

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

API-változások

Span<T> és Memory<T>

A .NET Core 2.1 tartalmaz néhány új típust, amelyek sokkal hatékonyabbá teszik a tömbök és más típusú memória használatát. Az új típusok a következők:

Ilyen típusok nélkül, ha olyan elemeket ad át, mint egy tömb vagy egy memóriapuffer egy szakasza, az adatok egy részének másolatát kell készítenie, mielőtt egy metódusnak továbbítanák. Ezek a típusok olyan virtuális nézetet biztosítanak az adatokról, amely szükségtelenné teszi a további memóriafoglalási és másolási műveleteket.

Az alábbi példa egy és Memory<T> egy Span<T> példány használatával biztosít virtuális nézetet egy tömb 10 eleméről.

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

Brotli-tömörítés

A .NET Core 2.1 támogatja a Brotli tömörítést és a tömörítést. A Brotli egy általános célú veszteségmentes tömörítési algoritmus, amely az RFC 7932-ben van definiálva, és amelyet a legtöbb webböngésző és fő webkiszolgáló támogat. Használhatja a streamalapú System.IO.Compression.BrotliStream osztályt vagy a nagy teljesítményű span-alapú System.IO.Compression.BrotliEncoder és System.IO.Compression.BrotliDecoder osztályokat. Az alábbi példa az osztály tömörítését szemlélteti 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

A BrotliStream viselkedés ugyanaz, mint DeflateStream az and GZipStream, ami megkönnyíti a kód konvertálását, amely meghívja ezeket az API-kat BrotliStream.

Új titkosítási API-k és titkosítási fejlesztések

A .NET Core 2.1 számos fejlesztést tartalmaz a titkosítási API-khoz:

Szoftvercsatornák fejlesztései

A .NET Core tartalmaz egy új típust és System.Net.Http.SocketsHttpHandleregy átírtat System.Net.Http.HttpMessageHandler, amely a magasabb szintű hálózati API-k alapját képezi. System.Net.Http.SocketsHttpHandlerpéldául a végrehajtás alapja HttpClient . A .NET Core korábbi verzióiban a magasabb szintű API-k natív hálózati implementációkon alapultak.

A .NET Core 2.1-ben bevezetett szoftvercsatornák implementációjának számos előnye van:

  • Jelentős teljesítménybeli javulás az előző implementációhoz képest.

  • A platformfüggőségek megszüntetése, ami leegyszerűsíti az üzembe helyezést és a karbantartást.

  • Konzisztens viselkedés az összes .NET Core-platformon.

SocketsHttpHandler a .NET Core 2.1 alapértelmezett implementációja. A metódus meghívásával AppContext.SetSwitch azonban konfigurálhatja az alkalmazást a régebbi HttpClientHandler osztály használatára:

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

Környezeti változóval is lemondhatja a szoftvercsatornák implementációinak használatát az alapján SocketsHttpHandler. Ehhez állítsa a 0 vagy a DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER false 0 értéket.

Windows rendszeren a natív implementációra támaszkodó, vagy az SocketsHttpHandler osztályt is használhatja System.Net.Http.WinHttpHandlerúgy, hogy átadja az osztály egy példányát a HttpClient konstruktornak.

Linux és macOS rendszeren csak folyamatonként konfigurálható HttpClient . Linuxon a libcurl üzembe helyezésére van szükség, ha a régi HttpClient implementációt szeretné használni. (A .NET Core 2.0-val van telepítve.)

Kompatibilitástörő változások

A kompatibilitástörő változásokról a 2.0-s verzióról a 2.1-es verzióra történő migrálás kompatibilitástörő változásait ismertető cikkben olvashat.

Lásd még