Устаревшие компоненты в .NET 5 и более поздних версий

Начиная с версии .NET 5 некоторые помеченные устаревшими API используют два новых свойства для ObsoleteAttribute.

  • Свойство ObsoleteAttribute.DiagnosticId указывает компилятору создавать предупреждения сборки с помощью пользовательского идентификатора диагностики. Пользовательский идентификатор позволяет отключать предупреждения об устаревших элементах отдельно друг от друга. В случае с устаревшими элементами в .NET 5 и более поздних версий пользовательский идентификатор диагностики имеет формат SYSLIB0XXX.

  • Свойство ObsoleteAttribute.UrlFormat указывает компилятору включить URL для получения дополнительных сведений об устаревшем элементе.

Если вы получаете предупреждения или ошибки сборки из-за использования устаревшего API, следуйте указаниям для идентификатора диагностики в разделе Справочник. Предупреждения или ошибки об этих устаревших элементах нельзя отключить с помощью стандартного идентификатора диагностики (CS0618) для устаревших типов или членов. Используйте вместо него пользовательский идентификатор диагностики SYSLIB0XXX. Дополнительные сведения см. в разделе Отключение предупреждений.

Справочные материалы

В следующей таблице представлен индекс устаревших элементов SYSLIB0XXX в .NET 5 и более поздних версий.

ИД диагностики Предупреждение или ошибка Description
SYSLIB0001 Предупреждение Кодировка UTF-7 небезопасна и не должна использоваться. Вместо нее рекомендуется использовать UTF-8.
SYSLIB0002 Ошибка PrincipalPermissionAttribute не учитывается средой выполнения и не должен использоваться.
SYSLIB0003 Предупреждение Управление доступом для кода (CAS) не поддерживается или не учитывается средой выполнения.
SYSLIB0004 Предупреждение Функция области ограниченного выполнения (CER) не поддерживается.
SYSLIB0005 Предупреждение Глобальный кэш сборок не поддерживается.
SYSLIB0006 Предупреждение Thread.Abort() не поддерживается и вызывает PlatformNotSupportedException.
SYSLIB0007 Предупреждение Реализации этого алгоритма шифрования по умолчанию не поддерживается.
SYSLIB0008 Предупреждение API CreatePdbGenerator() не поддерживается и вызывает PlatformNotSupportedException.
SYSLIB0009 Предупреждение Функция AuthenticationManager не поддерживается. Методы не будут опу или бросать PlatformNotSupportedException.
SYSLIB0010 Предупреждение Некоторые API удаленного взаимодействия не поддерживаются и вызывают PlatformNotSupportedException.
SYSLIB0011 Предупреждение Сериализация BinaryFormatter устарела и не должна использоваться.
SYSLIB0012 Предупреждение Assembly.CodeBase и Assembly.EscapedCodeBase включены только для обеспечения совместимости с .NET Framework. Вместо этого используйте Assembly.Location.
SYSLIB0013 Предупреждение Uri.EscapeUriString(String) в некоторых случаях может повредить строку URI. Рекомендуется использовать Uri.EscapeDataString(String) для строковых компонентов запроса.
SYSLIB0014 Предупреждение WebRequest, HttpWebRequest, ServicePoint и WebClient являются устаревшими. Вместо этого используйте HttpClient.
SYSLIB0015 Предупреждение DisablePrivateReflectionAttribute не оказывает влияния на .NET 6+.
SYSLIB0016 Предупреждение Используйте перегрузки Graphics.GetContextInfo, принимающие аргументы, для повышения производительности и уменьшения числа выделений.
SYSLIB0017 Предупреждение Подписывание со строгими именами не поддерживается и выдает исключение PlatformNotSupportedException.
SYSLIB0018 Предупреждение Загрузка только в контексте отражения не поддерживается и выдает исключение PlatformNotSupportedException.
SYSLIB0019 Предупреждение Элементы System.Runtime.InteropServices.RuntimeEnvironmentSystemConfigurationFile, GetRuntimeInterfaceAsIntPtr(Guid, Guid) и GetRuntimeInterfaceAsObject(Guid, Guid) больше не поддерживаются и не выдают исключение PlatformNotSupportedException.
SYSLIB0020 Предупреждение JsonSerializerOptions.IgnoreNullValues устарел. Чтобы игнорировать значения NULL при сериализации, присвойте параметру DefaultIgnoreCondition значение JsonIgnoreCondition.WhenWritingNull.
SYSLIB0021 Предупреждение Производные криптографические типы являются устаревшими. Вместо этого используйте метод Create для базового типа.
SYSLIB0022 Предупреждение Типы Rijndael и RijndaelManaged являются устаревшими. Вместо этого используйте Aes.
SYSLIB0023 Предупреждение RNGCryptoServiceProvider устарел. Чтобы создать случайное число, используйте вместо этого один из статических методов RandomNumberGenerator.
SYSLIB0024 Предупреждение SYSLIB0024: операции создания и выгрузки методов AppDomain не поддерживаются и вызывают исключение
SYSLIB0025 Предупреждение SuppressIldasmAttribute не оказывает влияния на .NET 6+.
SYSLIB0026 Предупреждение X509Certificate и X509Certificate2 являются неизменяемыми. Используйте соответствующий конструктор для создания нового сертификата.
SYSLIB0027 Предупреждение PublicKey.Key устарел. Используйте соответствующий метод для получения открытого ключа, например GetRSAPublicKey().
SYSLIB0028 Предупреждение X509Certificate2.PrivateKey устарел. Используйте соответствующий метод для получения закрытого ключа, например RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2), или используйте метод X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) для создания нового экземпляра с закрытым ключом.
SYSLIB0029 Предупреждение ProduceLegacyHmacValues устарел. Создание устаревших значений HMAC больше не поддерживается.
SYSLIB0030 Предупреждение HMACSHA1 всегда использует реализацию алгоритма, предоставляемую платформой. Используйте конструктор без параметра useManagedSha1.
SYSLIB0031 Предупреждение CryptoConfig.EncodeOID(String) устарел. Используйте функции ASN.1, предоставляемые в System.Formats.Asn1.
SYSLIB0032 Предупреждение Восстановление после исключений поврежденного состояния процесса не поддерживается. HandleProcessCorruptedStateExceptionsAttribute игнорируется.
SYSLIB0033 Предупреждение Rfc2898DeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) является устаревшим и не поддерживается. Вместо этого используйте PasswordDeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]).
SYSLIB0034 Предупреждение CmsSigner(CspParameters) устарел. Вместо него используйте альтернативный конструктор.
SYSLIB0035 Предупреждение SignerInfo.ComputeCounterSignature() устарел. Используйте перегрузку, которая принимает CmsSigner.
SYSLIB0036 Предупреждение Regex.CompileToAssembly является устаревшим и не поддерживается. Вместо него используйте RegexGeneratorAttribute с генератором источника регулярных выражений.
SYSLIB0037 Предупреждение AssemblyName члены HashAlgorithm, ProcessorArchitectureа также устаревшие и VersionCompatibility не поддерживаются.
SYSLIB0038 Предупреждение SerializationFormat.Binary устарел и не следует использовать.
SYSLIB0039 Предупреждение TLS версии 1.0 и 1.1 имеют известные уязвимости и не рекомендуется. Вместо этого используйте более новую версию TLS или используйте SslProtocols.None для отсрочки использования по умолчанию ОС.
SYSLIB0040 Предупреждение EncryptionPolicy.NoEncryption и EncryptionPolicy.AllowNoEncryption значительно уменьшите безопасность и не следует использовать в рабочем коде.
SYSLIB0041 Предупреждение Алгоритм хэша по умолчанию и количество итераций в Rfc2898DeriveBytes конструкторах устарели и небезопасны. Используйте конструктор, который принимает хэш-алгоритм и количество итераций.
SYSLIB0042 Предупреждение ToXmlString и FromXmlString не имеют реализации для типов криптографии с многоточием (ECC) и устарели. Используйте стандартный формат импорта и экспорта, например ExportSubjectPublicKeyInfoImportSubjectPublicKeyInfo открытых ключей или ImportPkcs8PrivateKeyExportPkcs8PrivateKey закрытых ключей.
SYSLIB0043 Предупреждение ECDiffieHellmanPublicKey.ToByteArray() и связанный конструктор не имеют согласованной и совместимой реализации на всех платформах. Вместо этого используйте ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo().
SYSLIB0044 Предупреждение AssemblyName.CodeBase и AssemblyName.EscapedCodeBase являются устаревшими. Использование их для загрузки сборки не поддерживается.
SYSLIB0045 Предупреждение Методы криптографической фабрики, принимающие имя алгоритма, устарели. Вместо этого используйте метод без параметров Create фабрики для типа алгоритма.
SYSLIB0046 Предупреждение Метод ControlledExecution.Run(Action, CancellationToken) может повредить процесс и не должен использоваться в рабочем коде.
SYSLIB0047 Предупреждение XmlSecureResolver устарел. Используйте XmlResolver.ThrowingResolver вместо этого при попытке запретить разрешение внешних сущностей XML.
SYSLIB0048 Предупреждение RSA.EncryptValue(Byte[]) и RSA.DecryptValue(Byte[]) являются устаревшими. Взамен используйте RSA.Encrypt и RSA.Decrypt.
SYSLIB0049 Предупреждение JsonSerializerOptions.AddContext устарел. Чтобы зарегистрировать JsonSerializerContext, используйте свойство TypeInfoResolver или TypeInfoResolverChain.
SYSLIB0050 Предупреждение Сериализация на основе форматирования устарела и не должна использоваться.
SYSLIB0051 Предупреждение ИНТЕРФЕЙСы API, поддерживающие устаревшую сериализацию на основе форматирования, устарели. Они не должны вызываться или расширяться кодом приложения.
SYSLIB0052 Предупреждение ИНТЕРФЕЙСы API, поддерживающие устаревшие механизмы расширения Regex, устарели.
SYSLIB0053 Предупреждение AesGcm должен указывать требуемый размер тега для шифрования и расшифровки. Используйте конструктор, который принимает размер тега.

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

По возможности рекомендуется всегда использовать доступное обходное решение. Но, если вы не можете изменить код, это предупреждение можно отключить с помощью директивы #pragma или параметра проекта <NoWarn>. Если вам необходимо использовать устаревшие API, а диагностика SYSLIB0XXX не возвращает ошибку, можно отключить предупреждение в коде или в файле проекта.

Чтобы отключить предупреждения в коде:

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Чтобы отключить предупреждения в файле проекта:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net6.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB0001 project-wide -->
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);SYSLIB0002</NoWarn>
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);SYSLIB0001;SYSLIB0002;SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Примечание.

Таким образом, отключается только конкретное предупреждение об устаревшем элементе. Любые другие предупреждения, в том числе и об устаревших элементах с другими идентификаторами диагностики, не отключаются.

См. также