API 已过时并带有非默认诊断 ID (.NET 6)

从 .NET 6 开始,某些 API 标记为已过时。 此中断性变更特定于标记为已过时并带有自定义诊断 ID 的 API。 取消默认过时诊断 ID(对于 C# 编译器,即为 CS0618),不会取消使用这些 API 时编译器生成的警告。

更改描述

在以前的 .NET 版本中,可以使用这些 API,而不会引发任何生成警告。 在 .NET 6 及更高版本中,使用这些 API 会生成编译时警告或错误,并显示自定义诊断 ID。 使用自定义诊断 ID 可单独取消某个过时警告,而不是取消所有过时警告。

下表列出了已过时 API 的自定义诊断 ID 及其相应的警告消息。

诊断 ID 说明 严重性
SYSLIB0013 在某些情况下,Uri.EscapeUriString(String) 可能会导致 Uri 字符串损坏。 请考虑改用 Uri.EscapeDataString(String) 查询字符串组件。 警告
SYSLIB0014 WebRequestHttpWebRequestServicePointWebClient 已过时。 请改用 HttpClient 警告
SYSLIB0015 DisablePrivateReflectionAttribute 在 .NET 6+ 中不起作用。 警告
SYSLIB0016 为改善性能并减少分配,使用接受参数的 Graphics.GetContextInfo 重载。 警告
SYSLIB0017 强名称签名不受支持并引发 PlatformNotSupportedException 警告
SYSLIB0018 仅反射加载不受支持并引发 PlatformNotSupportedException 警告
SYSLIB0019 不再支持 System.Runtime.InteropServices.RuntimeEnvironment 成员 SystemConfigurationFileGetRuntimeInterfaceAsIntPtr(Guid, Guid)GetRuntimeInterfaceAsObject(Guid, Guid) 并引发 PlatformNotSupportedException 警告
SYSLIB0020 JsonSerializerOptions.IgnoreNullValues 已过时。 若要在序列化时忽略 null 值,请将 DefaultIgnoreCondition 设为 JsonIgnoreCondition.WhenWritingNull 警告
SYSLIB0021 派生的加密类型已过时。 请改为对基类型使用 Create 方法。 警告
SYSLIB0022 RijndaelRijndaelManaged 类型已过时。 请改用 Aes 警告
SYSLIB0023 RNGCryptoServiceProvider 已过时。 若要生成随机数,请改为使用 RandomNumberGenerator 静态方法之一。 警告
SYSLIB0024 不支持创建和卸载 AppDomains,并引发异常。 警告
SYSLIB0025 SuppressIldasmAttribute 在 .NET 6+ 中不起作用。 警告
SYSLIB0026 X509CertificateX509Certificate2 是不可变的。 使用适当的构造函数创建新证书。 警告
SYSLIB0027 PublicKey.Key 已过时。 使用适当的方法获取公钥,如 GetRSAPublicKey() 警告
SYSLIB0028 X509Certificate2.PrivateKey 已过时。 使用适当的方法获取私钥(例如 RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2)),或使用 X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) 方法创建一个具有私钥的新实例。 警告
SYSLIB0029 ProduceLegacyHmacValues 已过时。 不再支持生成旧的 HMAC 值。 警告
SYSLIB0030 HMACSHA1 始终使用平台提供的算法实现。 使用不带 useManagedSha1 参数的构造函数。 警告
SYSLIB0031 CryptoConfig.EncodeOID(String) 已过时。 使用 System.Formats.Asn1 中提供的 ASN.1 功能。 警告
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 链接,遵循为每个诊断 ID 提供的特定指南。

  • 不能使用过时类型或成员的标准诊断 ID 取消有关这些过时类型或成员的警告或错误;请改用自定义 SYSLIBxxxx 诊断 ID 值。

受影响的 API

SYSLIB0013

SYSLIB0014

SYSLIB0015

SYSLIB0016

SYSLIB0017

SYSLIB0018

SYSLIB0019

SYSLIB0020

SYSLIB0021

SYSLIB0022

SYSLIB0023

SYSLIB0024

SYSLIB0025

SYSLIB0026

SYSLIB0027

SYSLIB0028

SYSLIB0029

SYSLIB0030

SYSLIB0031

SYSLIB0032

SYSLIB0033

SYSLIB0034

SYSLIB0035

请参阅