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 元素 HashAlgorithm、ProcessorArchitecture 和 VersionCompatibility 已过时,不受支持。 | 警告 |
SYSLIB0038 | SerializationFormat.Binary 已过时且不应使用。 | 警告 |
SYSLIB0039 | TLS 版本 1.0 和1.1 具有已知的漏洞,不建议使用。 请改用较新的 TLS 版本,或使用 SslProtocols.None 以遵从 OS 默认值。 | 警告 |
SYSLIB0040 | EncryptionPolicy.NoEncryption 和 EncryptionPolicy.AllowNoEncryption 显著降低了安全性,不应在生产代码中使用。 | 警告 |
SYSLIB0041 | Rfc2898DeriveBytes 构造函数中的默认哈希算法和迭代计数已过时且不安全。 使用接受哈希算法和迭代次数的构造函数。 | 警告 |
SYSLIB0042 | ToXmlString 和 FromXmlString 没有椭圆曲线加密 (ECC) 类型的实现,并且已过时。 使用标准导入和导出格式,例如用于公钥的 ExportSubjectPublicKeyInfo 或 ImportSubjectPublicKeyInfo ,和用于私钥的 ExportPkcs8PrivateKey 或 ImportPkcs8PrivateKey 。 |
警告 |
SYSLIB0043 | ECDiffieHellmanPublicKey.ToByteArray() 和关联构造函数在所有平台上都没有一致且可互操作的实现。 请改用 ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo()。 | 警告 |
SYSLIB0044 | AssemblyName.CodeBase 和 AssemblyName.EscapedCodeBase 已过时。 | 警告 |
SYSLIB0045 | 接受算法名称的加密工厂方法已过时。 请改为对算法类型使用无参数 Create 工厂方法。 |
警告 |
SYSLIB0047 | XmlSecureResolver 已过时。 请改用 XmlResolver.ThrowingResolver 来禁止解析外部 XML 资源。 |
警告 |
引入的版本
.NET 7
中断性变更的类型
这种过时可能会影响源兼容性。
建议操作
使用警告中提供的 URL 链接,遵循为每个诊断 ID 提供的特定指南。
不能使用过时类型或成员的标准诊断 ID 取消有关这些过时类型或成员的警告或错误;请改用自定义
SYSLIBxxxx
诊断 ID 值。
受影响的 API
SYSLIB0036
SYSLIB0037
SYSLIB0038
SYSLIB0039
SYSLIB0040
- System.Net.Security.EncryptionPolicy.AllowNoEncryption
- System.Net.Security.EncryptionPolicy.NoEncryption
SYSLIB0041
- Rfc2898DeriveBytes(String, Byte[])
- Rfc2898DeriveBytes(String, Int32)
- Rfc2898DeriveBytes(Byte[], Byte[], Int32)
- Rfc2898DeriveBytes(String, Byte[], Int32)
- Rfc2898DeriveBytes(String, Int32, Int32)
SYSLIB0042
- System.Security.Cryptography.ECDiffieHellmanCng.FromXmlString(String, ECKeyXmlFormat)
- System.Security.Cryptography.ECDiffieHellmanCng.ToXmlString(ECKeyXmlFormat)
- System.Security.Cryptography.ECDiffieHellmanCngPublicKey.FromXmlString(String)
- System.Security.Cryptography.ECDiffieHellmanCngPublicKey.ToXmlString()
- System.Security.Cryptography.ECDiffieHellmanPublicKey.ToXmlString()
- System.Security.Cryptography.ECDsaCng.FromXmlString(String, ECKeyXmlFormat)
- System.Security.Cryptography.ECDsaCng.ToXmlString(ECKeyXmlFormat)
SYSLIB0043
- System.Security.Cryptography.ECDiffieHellmanPublicKey.ToByteArray()
- ECDiffieHellmanPublicKey(Byte[])
SYSLIB0045
- System.Security.Cryptography.Aes.Create(String)
- System.Security.Cryptography.AsymmetricAlgorithm.Create(String)
- System.Security.Cryptography.DES.Create(String)
- System.Security.Cryptography.ECDiffieHellman.Create(String)
- System.Security.Cryptography.ECDsa.Create(String)
- System.Security.Cryptography.HashAlgorithm.Create(String)
- System.Security.Cryptography.KeyedHashAlgorithm.Create(String)
- System.Security.Cryptography.RandomNumberGenerator.Create(String)
- System.Security.Cryptography.RC2.Create(String)
- System.Security.Cryptography.Rijndael.Create(String)
- System.Security.Cryptography.RSA.Create(String)
- System.Security.Cryptography.SHA1.Create(String)
- System.Security.Cryptography.SHA256.Create(String)
- System.Security.Cryptography.SHA384.Create(String)
- System.Security.Cryptography.SHA512.Create(String)
- System.Security.Cryptography.SymmetricAlgorithm.Create(String)
- System.Security.Cryptography.TripleDES.Create(String)