Belangrijke wijzigingen in .NET Core 2.1

Als u migreert naar versie 2.1 van .NET Core, kunnen de belangrijke wijzigingen in dit artikel van invloed zijn op uw app.

Core .NET-bibliotheken

Pad-API's genereren geen uitzondering voor ongeldige tekens

API's waarbij bestandspaden worden gebruikt, valideren geen padtekens meer of genereert een ArgumentException ongeldig teken als er een ongeldig teken wordt gevonden.

Wijzigingsbeschrijving

In .NET Framework en .NET Core 1.0 - 2.0 worden de methoden die worden vermeld in de sectie Betreffende API's , een ArgumentException als het padargument een ongeldig padteken bevat. Vanaf .NET Core 2.1 controleren deze methoden niet langer op ongeldige padtekens of genereert u een uitzondering als er een ongeldig teken wordt gevonden.

Reden voor wijziging

Agressieve validatie van padtekens blokkeert enkele platformoverschrijdende scenario's. Deze wijziging is geïntroduceerd, zodat .NET niet probeert het resultaat van API-aanroepen van het besturingssysteem te repliceren of voorspellen. Zie de System.IO in .NET Core 2.1 sneak peek blogpost voor meer informatie.

Versie geïntroduceerd

.NET Core 2.1

Als uw code afhankelijk is van deze API's om te controleren op ongeldige tekens, kunt u een aanroep toevoegen aan Path.GetInvalidPathChars.

Betrokken API's

Zie ook


Privévelden toegevoegd aan ingebouwde structtypen

Privévelden zijn toegevoegd aan bepaalde structtypen in referentieassembly's. Als gevolg hiervan moeten deze structtypen in C# altijd worden geïnstantieerd met behulp van de nieuwe operator of de standaard letterlijke waarde.

Wijzigingsbeschrijving

In .NET Core 2.0 en vorige versies kunnen sommige structtypen, bijvoorbeeld, ConsoleKeyInfoworden geïnstantieerd zonder de operator of de new standaard letterlijke waarde in C# te gebruiken. Dit komt doordat de referentieassembly's die door de C#-compiler worden gebruikt, de privévelden voor de structs niet bevatten. Alle privévelden voor .NET-structtypen worden toegevoegd aan de referentieassembly's vanaf .NET Core 2.1.

De volgende C#-code compileert bijvoorbeeld in .NET Core 2.0, maar niet in .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

In .NET Core 2.1 resulteert de vorige code in de volgende compilerfout: CS0165 - Gebruik van niet-toegewezen lokale variabele 'sleutel'

Versie geïntroduceerd

2.1

Instantieer structtypen met behulp van de operator of de new standaard letterlijke waarde.

Voorbeeld:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

Categorie

Core .NET-bibliotheken

Betrokken API's


OpenSSL-versies in macOS

De .NET Core 3.0- en hoger-runtimes op macOS geven nu de voorkeur aan OpenSSL 1.1.x-versies voor OpenSSL 1.0.x-versies voor de AesCcmtypen , , AesGcm, DSAOpenSslECDiffieHellmanOpenSsl, ECDsaOpenSslRSAOpenSslen SafeEvpPKeyHandle typen.

De .NET Core 2.1-runtime ondersteunt nu OpenSSL 1.1.x-versies, maar geeft nog steeds de voorkeur aan OpenSSL 1.0.x-versies.

Wijzigingsbeschrijving

Voorheen gebruikte de .NET Core-runtime OpenSSL 1.0.x-versies op macOS voor typen die communiceren met OpenSSL. De meest recente Versie van OpenSSL 1.0.x, OpenSSL 1.0.2, is nu niet meer ondersteund. Als u typen wilt behouden die Gebruikmaken van OpenSSL voor ondersteunde versies van OpenSSL, gebruiken de .NET Core 3.0- en latere runtimes nu nieuwere versies van OpenSSL op macOS.

Met deze wijziging is het gedrag voor de .NET Core-runtimes in macOS als volgt:

  • De runtimes van .NET Core 3.0 en hoger gebruiken OpenSSL 1.1.x, indien beschikbaar, en vallen alleen terug op OpenSSL 1.0.x als er geen 1.1.x-versie beschikbaar is.

    Voor bellers die gebruikmaken van de OpenSSL-interoptypen met aangepaste P/Invokes, volgt u de richtlijnen in de SafeEvpPKeyHandle.OpenSslVersion opmerkingen. Uw app loopt mogelijk vast als u de OpenSslVersion waarde niet controleert.

  • De .NET Core 2.1-runtime maakt gebruik van OpenSSL 1.0.x, indien beschikbaar, en valt terug op OpenSSL 1.1.x als er geen 1.0.x-versie beschikbaar is.

    De runtime 2.1 geeft de voorkeur aan de eerdere versie van OpenSSL, omdat de SafeEvpPKeyHandle.OpenSslVersion eigenschap niet bestaat in .NET Core 2.1, dus de OpenSSL-versie kan niet betrouwbaar worden bepaald tijdens runtime.

Versie geïntroduceerd

  • .NET Core 2.1.16
  • .NET Core 3.0.3
  • .NET Core 3.1.2

Categorie

Core .NET-bibliotheken

Betrokken API's


MSBuild

Projecthulpprogramma's nu opgenomen in SDK

De .NET Core 2.1 SDK bevat nu algemene CLI-hulpprogramma's en u hoeft niet langer naar deze hulpprogramma's van het project te verwijzen.

Wijzigingsbeschrijving

In .NET Core 2.0 verwijzen projecten naar externe .NET-hulpprogramma's met de <DotNetCliToolReference> projectinstelling. In .NET Core 2.1 zijn sommige van deze hulpprogramma's opgenomen in de .NET Core SDK en is de instelling niet meer nodig. Als u verwijzingen naar deze hulpprogramma's in uw project opneemt, wordt er een foutbericht weergegeven dat lijkt op het volgende: het hulpprogramma Microsoft.EntityFrameworkCore.Tools.DotNet is nu opgenomen in de .NET Core SDK.

Hulpprogramma's die nu zijn opgenomen in .NET Core 2.1 SDK:

<DotNetCliToolReference-waarde> Hulpprogramma
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versie geïntroduceerd

.NET Core SDK 2.1.300

Verwijder de <DotNetCliToolReference> instelling uit uw project.

Categorie

MSBuild

Betrokken API's

N.v.t.


Zie ook