Partager via


Changements importants dans .NET Core 2.1

Si vous migrez vers la version 2.1 de .NET Core, les modifications majeures répertoriées dans cet article peuvent affecter votre application.

Bibliothèques .NET Core

Les API de chemin d’accès ne lèvent pas d’exception pour les caractères non valides

Les API qui impliquent des chemins d’accès ne valident plus les caractères de chemin d’accès ou lèvent une exception ArgumentException si un caractère non valide est trouvé.

Description de la modification

Dans .NET Framework et .NET Core 1.0 à 2.0, les méthodes répertoriées dans la section API affectées lèvent une exception ArgumentException si l’argument de chemin contient un caractère de chemin d’accès non valide. À compter de .NET Core 2.1, ces méthodes ne vérifient plus les caractères de chemin d’accès non valides ou lèvent une exception si un caractère non valide est trouvé.

Raison de la modification

La validation agressive des caractères de chemin bloque certains scénarios multiplateformes. Cette modification a été introduite afin que .NET n’essaie pas de répliquer ou de prédire le résultat des appels d’API du système d’exploitation. Pour plus d’informations, consultez le billet de blog aperçu de System.IO dans .NET Core 2.1.

Version introduite

.NET Core 2.1

Si votre code s’appuyait sur ces API pour rechercher des caractères non valides, vous pouvez ajouter un appel à Path.GetInvalidPathChars.

API affectées

Voir aussi


Champs privés ajoutés aux types de struct intégrés

Des champs privés ont été ajoutés à certains types de struct dans les assemblys de référence. Par conséquent, en C#, ces types de struct doivent toujours être instanciés à l’aide du nouvel opérateur ou du littéral par défaut.

Description de la modification

Dans .NET Core 2.0 et les versions précédentes, certains types de struct fournis, comme ConsoleKeyInfo, pouvaient être instanciés sans utiliser l'opérateur new ou le littéral par défaut en C#. Cela était dû au fait que les assemblys de référence utilisés par le compilateur C# ne contenaient pas les champs privés des structs. Tous les champs privés pour les types de struct .NET sont ajoutés aux assemblys de référence à partir de .NET Core 2.1.

Par exemple, le code C# suivant compile dans .NET Core 2.0, mais pas dans .NET Core 2.1 :

ConsoleKeyInfo key;    // Struct type

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

Dans .NET Core 2.1, le code précédent génère l’erreur du compilateur suivante : CS0165 - Utilisation de la variable locale non attribuée 'key'

Version introduite

2.1

Instanciez les types de struct en utilisant l'opérateur new ou le littéral par défaut.

Par exemple:

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

Catégorie

Bibliothèques .NET Core

API affectées


Versions OpenSSL sur macOS

Les runtimes .NET Core 3.0 et versions ultérieures sur macOS préfèrent désormais les versions OpenSSL 1.1.x aux versions OpenSSL 1.0.x pour les types AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl et SafeEvpPKeyHandle.

Le runtime .NET Core 2.1 prend désormais en charge les versions OpenSSL 1.1.x, mais préfère toujours les versions d’OpenSSL 1.0.x.

Description de la modification

Auparavant, le runtime .NET Core utilisait les versions OpenSSL 1.0.x sur macOS pour les types qui interagissent avec OpenSSL. La dernière version d’OpenSSL 1.0.x, OpenSSL 1.0.2, n’est plus prise en charge. Pour conserver les types qui utilisent OpenSSL sur les versions prises en charge d’OpenSSL, les runtimes .NET Core 3.0 et ultérieur utilisent désormais des versions plus récentes d’OpenSSL sur macOS.

Avec cette modification, le comportement des runtimes .NET Core sur macOS est le suivant :

  • Les runtimes .NET Core 3.0 et versions ultérieures utilisent OpenSSL 1.1.x, si disponible, et se replient sur OpenSSL 1.0.x uniquement si aucune version 1.1.x n'est disponible.

    Pour les appelants qui utilisent les types d’interopérabilité OpenSSL avec des P/Invokes personnalisés, suivez les instructions contenues dans les SafeEvpPKeyHandle.OpenSslVersion remarques. Votre application peut se bloquer si vous ne vérifiez pas la OpenSslVersion valeur.

  • Le runtime .NET Core 2.1 utilise OpenSSL 1.0.x, le cas échéant, et revient à OpenSSL 1.1.x s’il n’existe aucune version 1.0.x disponible.

    Le runtime 2.1 préfère la version antérieure d’OpenSSL, car la SafeEvpPKeyHandle.OpenSslVersion propriété n’existe pas dans .NET Core 2.1, de sorte que la version OpenSSL ne peut pas être déterminée de manière fiable au moment de l’exécution.

Version introduite

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

Catégorie

Bibliothèques .NET Core

API affectées


MSBuild

Outils de projet désormais inclus dans le Kit de développement logiciel (SDK)

Le Kit de développement logiciel (SDK) .NET Core 2.1 inclut désormais des outils CLI courants, et vous n’avez plus besoin de référencer ces outils à partir du projet.

Description de la modification

Dans .NET Core 2.0, les projets référencent des outils .NET externes avec le paramètre de <DotNetCliToolReference> projet. Dans .NET Core 2.1, certains de ces outils sont inclus dans le Kit de développement logiciel (SDK) .NET Core et le paramètre n’est plus nécessaire. Si vous incluez des références à ces outils dans votre projet, vous recevrez une erreur similaire à ce qui suit : l’outil « Microsoft.EntityFrameworkCore.Tools.DotNet » est désormais inclus dans le Kit de développement logiciel (SDK) .NET Core.

Outils désormais inclus dans le Kit de développement logiciel (SDK) .NET Core 2.1 :

Valeur <DotNetCliToolReference> Outil
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 introduite

SDK .NET Core 2.1.300

Supprimez le <DotNetCliToolReference> paramètre de votre projet.

Catégorie

MSBuild

API affectées

N/A


Voir aussi