Dela via


Icke-bakåtkompatibla ändringar i .NET Core 2.1

Om du migrerar till version 2.1 av .NET Core kan de icke-bakåtkompatibla ändringarna i den här artikeln påverka din app.

Core .NET-bibliotek

Sökvägs-API:er utlöser inte ett undantag för ogiltiga tecken

API:er som omfattar filsökvägar validerar inte längre sökvägstecken eller genererar ett ArgumentException om ett ogiltigt tecken hittas.

Ändra beskrivning

I .NET Framework och .NET Core 1.0–2.0 genererar metoderna i avsnittet Berörda API:er ett ArgumentException om sökvägsargumentet innehåller ett ogiltigt sökvägstecken. Från och med .NET Core 2.1 söker dessa metoder inte längre efter ogiltiga sökvägstecken eller utlöser ett undantag om ett ogiltigt tecken hittas.

Orsak till ändringen

Aggressiv validering av sökvägstecken blockerar vissa plattformsoberoende scenarier. Den här ändringen infördes så att .NET inte försöker replikera eller förutsäga resultatet av operativsystemets API-anrop. Mer information finns i blogginlägget System.IO i .NET Core 2.1.

Version introducerad

.NET Core 2.1

Om koden förlitade sig på dessa API:er för att söka efter ogiltiga tecken kan du lägga till ett anrop till Path.GetInvalidPathChars.

Berörda API:er

Se även


Privata fält har lagts till i inbyggda structtyper

Privata fält lades till i vissa structtyper i referenssammansättningar. Därför måste dessa structtyper i C# alltid instansieras med hjälp av den nya operatorn eller standardliteralen.

Ändra beskrivning

I .NET Core 2.0 och tidigare versioner kan vissa tillhandahållna structtyper, till exempel ConsoleKeyInfo, instansieras utan att använda operatorn new eller standardliteralen i C#. Det berodde på att referenssammansättningarna som användes av C#-kompilatorn inte innehöll de privata fälten för structs. Alla privata fält för .NET-structtyper läggs till i referenssammansättningarna med början i .NET Core 2.1.

Följande C#-kod kompileras till exempel i .NET Core 2.0, men inte i .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

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

I .NET Core 2.1 resulterar den tidigare koden i följande kompilatorfel: CS0165 – Användning av den otilldelade lokala variabeln "nyckel"

Version introducerad

2.1

Instansiera structtyper med hjälp av operatorn new eller standardliteralen.

Till exempel:

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!");

Kategori

Core .NET-bibliotek

Berörda API:er


OpenSSL-versioner på macOS

.NET Core 3.0 och senare körningar på macOS föredrar nu OpenSSL 1.1.x-versioner till OpenSSL 1.0.x-versioner för typerna AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSslRSAOpenSsloch SafeEvpPKeyHandle .

.NET Core 2.1-körningen stöder nu OpenSSL 1.1.x-versioner, men föredrar fortfarande OpenSSL 1.0.x-versioner.

Ändra beskrivning

Tidigare använde .NET Core-körningen OpenSSL 1.0.x-versioner på macOS för typer som interagerar med OpenSSL. Den senaste OpenSSL 1.0.x-versionen, OpenSSL 1.0.2, har nu inte stöd. För att behålla typer som använder OpenSSL i versioner av OpenSSL som stöds använder .NET Core 3.0 och senare körningar nu nyare versioner av OpenSSL på macOS.

Med den här ändringen är beteendet för .NET Core-körningen på macOS följande:

  • Versionskörningarna för .NET Core 3.0 och senare använder OpenSSL 1.1.x, om det är tillgängligt, och återgår endast till OpenSSL 1.0.x om det inte finns någon 1.1.x-version tillgänglig.

    För uppringare som använder OpenSSL-interoptyperna med anpassade P/Invokes följer du riktlinjerna i SafeEvpPKeyHandle.OpenSslVersion kommentarerna. Din app kan krascha om du inte kontrollerar värdet OpenSslVersion .

  • .NET Core 2.1-körningen använder OpenSSL 1.0.x, om tillgängligt, och återgår till OpenSSL 1.1.x om det inte finns någon tillgänglig version på 1.0.x.

    2.1-körningen föredrar den tidigare versionen av OpenSSL eftersom SafeEvpPKeyHandle.OpenSslVersion egenskapen inte finns i .NET Core 2.1, så OpenSSL-versionen kan inte fastställas på ett tillförlitligt sätt vid körning.

Version introducerad

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

Kategori

Core .NET-bibliotek

Berörda API:er


MSBuild

Projektverktyg som nu ingår i SDK

.NET Core 2.1 SDK innehåller nu vanliga CLI-verktyg och du behöver inte längre referera till dessa verktyg från projektet.

Ändra beskrivning

I .NET Core 2.0 refererar projekt till externa .NET-verktyg med projektinställningen <DotNetCliToolReference> . I .NET Core 2.1 ingår några av dessa verktyg i .NET Core SDK och inställningen behövs inte längre. Om du inkluderar referenser till dessa verktyg i projektet får du ett fel som liknar följande: Verktyget Microsoft.EntityFrameworkCore.Tools.DotNet ingår nu i .NET Core SDK.

Verktyg som nu ingår i .NET Core 2.1 SDK:

<DotNetCliToolReference-värde> Verktyg
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

Version introducerad

.NET Core SDK 2.1.300

Ta bort inställningen <DotNetCliToolReference> från projektet.

Kategori

MSBuild

Berörda API:er

Ej tillämpligt


Se även