Устаревшие компоненты в .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.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. |
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) и устарели. Используйте стандартный формат импорта и экспорта, например ExportSubjectPublicKeyInfo ImportSubjectPublicKeyInfo открытых ключей или ImportPkcs8PrivateKey ExportPkcs8PrivateKey закрытых ключей. |
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 должен указывать требуемый размер тега для шифрования и расшифровки. Используйте конструктор, который принимает размер тега. |
SYSLIB0054 | Предупреждение | Thread.VolatileRead и Thread.VolatileWrite являются устаревшими. Вместо этого используются типы Volatile.Read или Volatile.Write. |
SYSLIB0055 | Предупреждение | AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* Методы с подписанными параметрами устарели. Вместо этого используйте неподписанные перегрузки. |
SYSLIB0056 | Предупреждение | Assembly.LoadFrom с пользовательским AssemblyHashAlgorithm является устаревшим. Используйте перегрузки без AssemblyHashAlgorithm . |
SYSLIB0057 | Предупреждение | X509Certificate2 и X509Certificate конструкторы для содержимого двоичного файла устарели. |
Отключение предупреждений
По возможности рекомендуется всегда использовать доступное обходное решение. Но, если вы не можете изменить код, это предупреждение можно отключить с помощью директивы #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>
Примечание.
Таким образом, отключается только конкретное предупреждение об устаревшем элементе. Любые другие предупреждения, в том числе и об устаревших элементах с другими идентификаторами диагностики, не отключаются.