SYSLIB0045. Некоторые методы криптографической фабрики устарели

Следующие System.Security.Cryptography методы устарели, начиная с .NET 7. При их использовании во время компиляции создается предупреждение SYSLIB0045. Каждый из этих методов фабрики принимает строковый аргумент, представляющий имя алгоритма. Эти методы вызываются CryptoConfig.CreateFromName и приводят результат к типу возвращаемого значения.

Эти методы отмечены [Obsolete] , так как в обрезаемых приложениях они могут возвращать null , когда они не будут выполняться в неурезаемых приложениях. Кроме того, в неурезаемых приложениях поведение на основе исключений этих методов иногда удивляет вызывающих объектов, и многие известные идентификаторы связаны с типами, которые сами помечаются [Obsolete].

Обходное решение

Вызовы, которые передают константную строку, должны быть изменены на метод фабрики без параметров или строгий вызов для создания соответствующего типа. Например, вызов Aes.Create("AES") может быть заменен либо Aes.Create()new AesCryptoServiceProvider(). AesCryptoServiceProvider Так как тип также помечается[Obsolete], Aes.Create() является предпочтительной заменой.

Вызовы, которые передают неконстантную строку, могут использовать собственную таблицу подстановки или изменяться для прямого вызова CryptoConfig.CreateFromName .

Отключение предупреждений

Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.

Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.

// Disable the warning.
#pragma warning disable SYSLIB0045

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

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

Чтобы отключить все SYSLIB0045 предупреждения в проекте, добавьте <NoWarn> свойство в файл проекта.

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

Дополнительные сведения см. в разделе Отключение предупреждений.