A .NET Core 2.1 újdonságai
A .NET Core 2.1 a következő területeken tartalmaz fejlesztéseket és új funkciókat:
- Szerszámozás
- Előretekerés
- Üzembe helyezés
- Windows kompatibilitási csomag
- A JIT fordítási fejlesztései
- API-módosítások
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áskordotnet 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 adotnet watch
parancsnak átadott beállításokat a gyermekfolyamatnakdotnet
átadott argumentumoktól. Nélküle a--verbose
beállítás adotnet watch
parancsra vonatkozik, nem a parancsradotnet 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 DotnetCliToolReference
tette 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:
dotnet tool install
eszköz telepítéséhez.dotnet tool update
eszköz eltávolításához és újratelepítéséhez, amely hatékonyan frissíti azt.dotnet tool list
a jelenleg telepített eszközök listázásához.dotnet tool uninstall
a jelenleg telepített eszközök eltávolításához.
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ául
run
: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:
System.Security.Cryptography.Pkcs.SignedCms a System.Security.Cryptography.Pkcs csomagban érhető el. A megvalósítás megegyezik a SignedCms .NET-keretrendszer osztályával.
A metódusok új túlterhelései X509Certificate.GetCertHash X509Certificate.GetCertHashString elfogadnak egy kivonatalgoritmus-azonosítót, amely lehetővé teszi a hívók számára, hogy az SHA-1-nél eltérő algoritmusokkal szerezzék be a tanúsítvány ujjlenyomat-értékeit.
Új Span<T>titkosítási API-k érhetők el kivonatoláshoz, HMAC-hoz, kriptográfiai véletlenszerű számgeneráláshoz, aszimmetrikus aláírás-létrehozáshoz, aszimmetrikus aláírás-feldolgozáshoz és RSA-titkosításhoz.
A teljesítmény System.Security.Cryptography.Rfc2898DeriveBytes körülbelül 15%-kal javult egy Span<T>-alapú implementáció használatával.
Az új System.Security.Cryptography.CryptographicOperations osztály két új metódust tartalmaz:
FixedTimeEquals a visszaérkezési idő rögzített időt vesz igénybe bármely két azonos hosszúságú bemenet esetében, ami alkalmassá teszi a titkosítási ellenőrzésben való használatra, hogy ne járuljon hozzá a mellékcsatorna-információk időzítéséhez.
ZeroMemory olyan memóriatörlési rutin, amely nem optimalizálható.
A statikus RandomNumberGenerator.Fill metódus véletlenszerű értékeket ad Span<T> meg.
Ez System.Security.Cryptography.Pkcs.EnvelopedCms mostantól linuxos és macOS rendszeren is támogatott.
Az Elliptic-Curve Diffie-Hellman (ECDH) mostantól elérhető az System.Security.Cryptography.ECDiffieHellman osztálycsaládban. A felület ugyanaz, mint a .NET-keretrendszer.
A visszaadott RSA.Create példány sha-2 kivonat használatával titkosíthatja vagy visszafejtheti az OAEP-et, valamint létrehozhat vagy érvényesíthet aláírásokat RSA-PSS használatával.
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.