Condividi tramite


SYSLIB0036: Regex.CompileToAssembly è obsoleto

Il metodo Regex.CompileToAssembly è contrassegnato come obsoleto, a partire da .NET 7. L'uso di questa API nel codice genera un avviso SYSLIB0036 in fase di compilazione.

In .NET 5, .NET 6 e tutte le versioni di .NET Core, Regex.CompileToAssembly genera un PlatformNotSupportedException. In .NET Framework Regex.CompileToAssembly consente la compilazione di un'istanza di espressione regolare in un assembly.

Soluzione alternativa

Usare l'attributo GeneratedRegexAttribute, che richiama un generatore di origine di espressioni regolari. In fase di compilazione, il generatore di origine produce un'API specifica di un criterio di espressione regolare e le relative opzioni.

// 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) { ... }

Eliminare un avviso

Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.

// Disable the warning.
#pragma warning disable SYSLIB0036

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

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

Per eliminare tutti gli avvisi SYSLIB0036 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.

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

Per altre informazioni, vedere Non visualizzare gli avvisi.