Condividi tramite


Modifiche che causano un'interruzione in .NET Core 2.1

Se si esegue la migrazione alla versione 2.1 di .NET Core, le modifiche che causano un'interruzione elencate in questo articolo potrebbero influire sull'app.

Principali librerie .NET

Le API di percorso non generano un'eccezione per i caratteri non validi

Le API che coinvolgono percorsi di file non convalidano più i caratteri di percorso o generano ArgumentException se viene trovato un carattere non valido.

Descrizione delle modifiche

In .NET Framework e .NET Core 1.0 - 2.0 i metodi elencati nella sezione API interessate generano ArgumentException se l'argomento percorso contiene un carattere di percorso non valido. A partire da .NET Core 2.1, questi metodi non controllano più caratteri di percorso non validi né generano un'eccezione se viene trovato un carattere non valido.

Motivo della modifica

La convalida aggressiva dei caratteri di percorso blocca alcuni scenari multipiattaforma. Questa modifica è stata introdotta in modo che .NET non tenti di replicare o prevedere il risultato delle chiamate API del sistema operativo. Per altre informazioni, vedere il post di blog relativo all’anteprima di System.IO in .NET Core 2.1.

Versione introdotta

.NET Core 2.1

Se il codice si basa su queste API per verificare la presenza di caratteri non validi, è possibile aggiungere una chiamata a Path.GetInvalidPathChars.

API interessate

Vedi anche


Campi privati aggiunti ai tipi di struct predefiniti

I campi privati sono stati aggiunti a determinati tipi di struct negli assembly di riferimento. Di conseguenza, in C#, questi tipi di struct devono sempre essere creati in un'istanza usando il nuovo operatore o il valore letterale predefinito.

Descrizione delle modifiche

In .NET Core 2.0 e versioni precedenti alcuni tipi di struct forniti, ad esempio ConsoleKeyInfo, possono essere creati in istanze senza usare l'operatore new o il valore letterale predefinito in C#. Ciò è dovuto al fatto che gli assembly di riferimento usati dal compilatore C# non contengono i campi privati per gli struct. Tutti i campi privati per i tipi di struct .NET vengono aggiunti agli assembly di riferimento a partire da .NET Core 2.1.

Ad esempio, il codice C# seguente viene compilato in .NET Core 2.0, ma non in .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

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

In .NET Core 2.1 il codice precedente genera l'errore del compilatore seguente: CS0165 - Uso della variabile locale non assegnata 'key'

Versione introdotta

2.1

Crea un'istanza dei tipi di struct usando l'operatore new o il valore letterale predefinito.

Ad esempio:

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

Category

Principali librerie .NET

API interessate


Versioni di OpenSSL in macOS

I runtime di .NET Core 3.0 e versioni successive in macOS ora preferiscono le versioni openSSL 1.1.x alle versioni OpenSSL 1.0.x per i tipi AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl e SafeEvpPKeyHandle.

Il runtime di .NET Core 2.1 supporta ora le versioni OpenSSL 1.1.x, ma preferisce comunque le versioni di OpenSSL 1.0.x.

Descrizione delle modifiche

In precedenza, il runtime di .NET Core usava le versioni openSSL 1.0.x in macOS per i tipi che interagiscono con OpenSSL. La versione più recente di OpenSSL 1.0.x, OpenSSL 1.0.2, è ora non supportata. Per mantenere i tipi che usano OpenSSL nelle versioni supportate di OpenSSL, i runtime di .NET Core 3.0 e versioni successive ora usano le versioni più recenti di OpenSSL in macOS.

Con questa modifica, il comportamento per i runtime di .NET Core in macOS è il seguente:

  • I runtime di .NET Core 3.0 e versioni successive usano OpenSSL 1.1.x, se disponibile, ed eseguono il fallback a OpenSSL 1.0.x solo se non è disponibile alcuna versione 1.1.x.

    Per i chiamanti che usano i tipi di interoperabilità OpenSSL con P/Invoke personalizzati, segui le indicazioni riportate nelle note SafeEvpPKeyHandle.OpenSslVersion. L'app potrebbe arrestarsi in modo anomalo se non si controlla il valore OpenSslVersion.

  • Il runtime di .NET Core 2.1 usa OpenSSL 1.0.x, se disponibile, ed esegue il fallback a OpenSSL 1.1.x se non è disponibile alcuna versione 1.0.x.

    Il runtime 2.1 preferisce la versione precedente di OpenSSL perché la proprietà SafeEvpPKeyHandle.OpenSslVersion non esiste in .NET Core 2.1, pertanto la versione OpenSSL non può essere determinata in modo affidabile in fase di esecuzione.

Versione introdotta

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

Category

Principali librerie .NET

API interessate


MSBuild

Strumenti di progetto ora inclusi nell'SDK

.NET Core 2.1 SDK include ora strumenti comuni dell'interfaccia della riga di comando e non è più necessario fare riferimento a questi strumenti dal progetto.

Descrizione delle modifiche

In .NET Core 2.0 i progetti fanno riferimento a strumenti .NET esterni con l'impostazione del progetto <DotNetCliToolReference>. In .NET Core 2.1 alcuni di questi strumenti sono inclusi in .NET Core SDK e l'impostazione non è più necessaria. Se si includono riferimenti a questi strumenti nel progetto, verrà visualizzato un errore simile al seguente: lo strumento "Microsoft.EntityFrameworkCore.Tools.DotNet" è ora incluso in .NET Core SDK.

Strumenti ora inclusi in .NET Core 2.1 SDK:

Valore <DotNetCliToolReference> Tool
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

Versione introdotta

.NET Core SDK 2.1.300

Rimuovi l'impostazione <DotNetCliToolReference> dal progetto.

Category

MSBuild

API interessate

N/D


Vedi anche