Поделиться через


Устаревшие API с нестандартными ИД диагностики (.NET 6)

Начиная с версии .NET 6, некоторые API-интерфейсы помечены как устаревшие. Это критическое изменение относится к API, которые были помечены как устаревшие с помощью пользовательского идентификатора диагностики. В случае отключения идентификатора диагностики устаревших элементов по умолчанию (CS0618 для компилятора C#) не отключаются предупреждения, создаваемые компилятором при использовании этих API.

Описание изменения

В предыдущих версиях .NET эти API можно использовать без каких-либо предупреждений сборки. В .NET 6 и более поздних версиях эти API создают предупреждение во время компиляции или ошибку с пользовательским идентификатором диагностики. Применение пользовательских идентификаторов диагностики позволяет отключать предупреждения об устаревших элементах по отдельности вместо общего запрета всех таких предупреждений.

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

ИД диагностики Description Серьезность
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.RuntimeEnvironment SystemConfigurationFile, 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. Предупреждение

Представленные версии

.NET 6

  • Следуйте указаниям, приведенным для каждого идентификатора диагностики, используя URL, предоставленный в предупреждении.

  • Предупреждения или ошибки об этих устаревших элементах нельзя отключить с помощью стандартного идентификатора диагностики для устаревших типов или членов. Используйте вместо него пользовательский идентификатор диагностики SYSLIBxxxx.

Затронутые API

SYSLIB0013

SYSLIB0014

SYSLIB0015

SYSLIB0016

SYSLIB0017

SYSLIB0018

SYSLIB0019

SYSLIB0020

SYSLIB0021

SYSLIB0022

SYSLIB0023

SYSLIB0024

SYSLIB0025

SYSLIB0026

SYSLIB0027

SYSLIB0028

SYSLIB0029

SYSLIB0030

SYSLIB0031

SYSLIB0032

SYSLIB0033

SYSLIB0034

SYSLIB0035

См. также