SYSLIB0036 : Regex.CompileToAssembly est obsolète

La méthode Regex.CompileToAssembly est marquée comme obsolète, à partir de .NET 7. L’utilisation de cette API dans le code génère un avertissement SYSLIB0036 au moment de la compilation.

Dans .NET 5, .NET 6 et toutes les versions de .NET Core, Regex.CompileToAssembly lève une PlatformNotSupportedException. Dans .NET Framework, Regex.CompileToAssembly permet à une instance d’expression régulière d’être compilée dans un assembly.

Solution de contournement

Utilisez l’attribut GeneratedRegexAttribute, qui appelle un générateur de source d’expression régulière. Au moment de la compilation, le générateur source produit une API spécifique à un modèle d’expression régulière et ses options.

// This attribute causes the regular expression pattern to be compiled into your assembly,
// which enables it to start up and run more quickly.
[GeneratedRegex("abc|def", RegexOptions.IgnoreCase)]
private static partial Regex MyRegex();

// ...

// Use the regular expression
if (MyRegex().IsMatch(text) { ... }

Supprimer un avertissement

Si vous devez utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le code ou dans votre fichier projet.

Pour supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactiver l’avertissement.

// Disable the warning.
#pragma warning disable SYSLIB0036

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0036

Pour supprimer tous les avertissements SYSLIB0036 dans votre projet, ajoutez une propriété <NoWarn> à votre fichier projet.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0036</NoWarn>
  </PropertyGroup>
</Project>

Pour plus d’informations, consultez Supprimer des avertissements.