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

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

更改描述

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

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

诊断 ID 说明 严重性
SYSLIB0036 Regex.CompileToAssembly 已过时,不受支持。 改为使用 RegexGeneratorAttribute 和正则表达式源生成器。 警告
SYSLIB0037 AssemblyName 元素 HashAlgorithmProcessorArchitectureVersionCompatibility 已过时,不受支持。 警告
SYSLIB0038 SerializationFormat.Binary 已过时且不应使用。 警告
SYSLIB0039 TLS 版本 1.0 和1.1 具有已知的漏洞,不建议使用。 请改用较新的 TLS 版本,或使用 SslProtocols.None 以遵从 OS 默认值。 警告
SYSLIB0040 EncryptionPolicy.NoEncryptionEncryptionPolicy.AllowNoEncryption 显著降低了安全性,不应在生产代码中使用。 警告
SYSLIB0041 Rfc2898DeriveBytes 构造函数中的默认哈希算法和迭代计数已过时且不安全。 使用接受哈希算法和迭代次数的构造函数。 警告
SYSLIB0042 ToXmlStringFromXmlString 没有椭圆曲线加密 (ECC) 类型的实现,并且已过时。 使用标准导入和导出格式,例如用于公钥的 ExportSubjectPublicKeyInfoImportSubjectPublicKeyInfo,和用于私钥的 ExportPkcs8PrivateKeyImportPkcs8PrivateKey 警告
SYSLIB0043 ECDiffieHellmanPublicKey.ToByteArray() 和关联构造函数在所有平台上都没有一致且可互操作的实现。 请改用 ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() 警告
SYSLIB0044 AssemblyName.CodeBaseAssemblyName.EscapedCodeBase 已过时。 警告
SYSLIB0045 接受算法名称的加密工厂方法已过时。 请改为对算法类型使用无参数 Create 工厂方法。 警告
SYSLIB0047 XmlSecureResolver 已过时。 请改用 XmlResolver.ThrowingResolver 来禁止解析外部 XML 资源。 警告

引入的版本

.NET 7

中断性变更的类型

这种过时可能会影响源兼容性

  • 使用警告中提供的 URL 链接,遵循为每个诊断 ID 提供的特定指南。

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

受影响的 API

SYSLIB0036

SYSLIB0037

SYSLIB0038

SYSLIB0039

SYSLIB0040

SYSLIB0041

SYSLIB0042

SYSLIB0043

SYSLIB0045

SYSLIB0047

请参阅