具有非預設診斷識別碼的 API 淘汰 (.NET 7)
從 .NET 7 開始,某些 API 已標示為已淘汰。 這項中斷性變更專屬於已標示為已過時且「具有自訂診斷識別碼」的 API。 隱藏 C# 編譯器的預設淘汰診斷識別碼,也就是 CS0618,不會隱藏使用這些 API 時編譯器所產生的警告。
變更描述
在舊版 .NET 中,可以使用這些 API,且不會出現任何建置警告。 在 .NET 7 與更新版本中,使用這些 API 會產生具有自訂診斷識別碼的編譯時期警告或錯誤。 使用自訂診斷識別碼可讓您個別隱藏淘汰警告,而不是隱藏所有淘汰警告。
下表列出已淘汰 API 的自訂診斷識別碼及其對應的警告訊息。
診斷識別碼 | 描述 | 嚴重性 |
---|---|---|
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 | 接受演算法名稱的密碼編譯 Factory 方法已淘汰。 請改用演算法類型的無參數 Create Factory 方法。 |
警告 |
SYSLIB0047 | XmlSecureResolver 已經過時。 請改用 XmlResolver.ThrowingResolver 來禁止外部 XML 資源的解析。 |
警告 |
導入的版本
.NET 7
中斷性變更的類型
這些混淆可能會影響來源相容性。
建議的動作
請使用警告上提供的 URL 連結來遵循針對每個診斷識別碼提供的特定指引。
使用淘汰類型或成員的標準診斷識別碼無法隱藏這些淘汰項目的警告或錯誤;請改用自訂
SYSLIBxxxx
診斷識別碼值。
受影響的 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)