Share via


SYSLIB0045: Alcuni metodi factory di crittografia sono obsoleti

I metodi System.Security.Cryptography seguenti sono obsoleti, a partire da .NET 7. Il loro uso nel codice genera un avviso SYSLIB0045 in fase di compilazione. Ognuno di questi metodi factory accetta un argomento stringa che rappresenta il nome dell'algoritmo. Questi metodi chiamano CryptoConfig.CreateFromName ed eseguono il cast del risultato al tipo restituito.

Questi metodi sono stati contrassegnati come [Obsolete] perché nelle applicazioni tagliate possono restituire null, contrariamente alle applicazioni non tagliate. Inoltre, nelle applicazioni non tagliate, i comportamenti basati sulle eccezioni di questi metodi a volte sorprendono i chiamanti e molti degli identificatori noti sono associati a tipi contrassegnati come [Obsolete] da loro stessi.

Soluzione alternativa

Le chiamate che passano una stringa costante devono essere modificate nel metodo factory senza parametri o in una chiamata complessa per creare il tipo appropriato. Ad esempio, una chiamata a Aes.Create("AES") può essere sostituita con Aes.Create() o new AesCryptoServiceProvider(). Poiché anche il tipo AesCryptoServiceProvider è contrassegnato come [Obsolete], Aes.Create() è la sostituzione preferita.

Le chiamate che passano una stringa non costante possono usare la propria tabella di ricerca o essere modificate per chiamare direttamente CryptoConfig.CreateFromName.

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 SYSLIB0045

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

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

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

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

Per altre informazioni, vedere Eliminare gli avvisi.