共用方式為


.NET 5+ 中的已淘汰功能

從 .NET 5 開始,某些新標示為已淘汰的 API 會使用 ObsoleteAttribute 上的兩個新屬性。

  • ObsoleteAttribute.DiagnosticId 屬性會告知編譯器使用自訂診斷識別碼產生建置警告。 自訂識別碼可以明確且個別地隱藏淘汰警告。 在命名空間棄用的情況下 System* ,自訂診斷識別碼的格式為 SYSLIB0XXX。 在 Microsoft.Extensions 指定的過時項目中,自訂診斷識別碼的格式為 EXTOBS0XXX
  • ObsoleteAttribute.UrlFormat 屬性會告知編譯器,在包含的 URL 連結中深入了解該功能已過時的資訊。

如果您因為使用過時的 API 而遇到建置警告或錯誤,請遵循下列參考表格中針對診斷識別碼提供的特定指引。 無法使用過時類型或成員的標準診斷識別碼 (CS0618) 來隱藏這些過時的警告或錯誤;請改用自訂SYSLIB0XXXEXTOBS0XXX診斷識別碼值。 如需詳細資訊,請參閱隱藏警告

下表提供 .NET 5 和更新版本中具有自訂診斷識別碼的過時 API 的索引:

SYSLIB 已廢棄的功能

下表列出 SYSLIB0XXX .NET 5+ 的過時項目。

診斷識別碼 警告或錯誤 描述
SYSLIB0001 警告 UTF-7 編碼不安全,不應該使用。 請考慮改用 UTF-8。
SYSLIB0002 錯誤 PrincipalPermissionAttribute 不被執行階段接受,不得使用。
SYSLIB0003 警告 執行階段不支援或接受程式碼存取安全性 (CAS)。
SYSLIB0004 警告 不支援限制的執行區域 (CER) 特徵。
SYSLIB0005 警告 不支援全域組件快取 (GAC)。
SYSLIB0006 警告 不支援 Thread.Abort() 屬性,而且會擲回 PlatformNotSupportedException
SYSLIB0007 警告 不支援此密碼編譯演算法的預設實作。
SYSLIB0008 警告 不支援 CreatePdbGenerator() API,而且會擲回 PlatformNotSupportedException
SYSLIB0009 警告 不支援 AuthenticationManager。 方法將不執行任何操作或丟擲 PlatformNotSupportedException
SYSLIB0010 警告 某些遠端 API 不受支援,因此會拋出 PlatformNotSupportedException
SYSLIB0011 警告 BinaryFormatter 序列化已淘汰,不應該使用。
SYSLIB0012 警告 Assembly.CodeBaseAssembly.EscapedCodeBase 僅針對 .NET Framework 相容性而包含。 請改用 Assembly.Location
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 的多載。
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 警告 接受演算法名稱的密碼編譯 Factory 方法已淘汰。 請改用演算法類型的無參數 Create Factory 方法。
SYSLIB0046 警告 ControlledExecution.Run(Action, CancellationToken) 方法可能會損毀流程,所以不應該用於生產程式碼。
SYSLIB0047 警告 XmlSecureResolver 已經過時。 嘗試禁止 XML 外部實體解析時,請改用 XmlResolver.ThrowingResolver
SYSLIB0048 警告 RSA.EncryptValue(Byte[])RSA.DecryptValue(Byte[]) 已淘汰。 請改用 RSA.EncryptRSA.Decrypt
SYSLIB0049 警告 JsonSerializerOptions.AddContext 已淘汰。 若要註冊 JsonSerializerContext,請使用 TypeInfoResolver 或 TypeInfoResolverChain 屬性。
SYSLIB0050 警告 格式器型序列化已淘汰,不應使用。
SYSLIB0051 警告 支援已淘汰的格式器型序列化的 API 已淘汰。 不應透過應用程式程式碼呼叫或延伸它們。
SYSLIB0052 警告 支援規則運算式擴充性已淘汰機制的 API 已淘汰。
SYSLIB0053 警告 AesGcm 應該指出加密和解密所需的標記大小。 使用接受該標記大小的建構函式。
SYSLIB0054 警告 Thread.VolatileReadThread.VolatileWrite 已淘汰。 請改用 Volatile.ReadVolatile.Write
SYSLIB0055 警告 AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* 方法使用符號參數已經過時。 請改用不帶正負號的多載。
SYSLIB0056 警告 具有自訂 Assembly.LoadFromAssemblyHashAlgorithm 已被淘汰。 在沒有 AssemblyHashAlgorithm 的情況下使用多載函數。
SYSLIB0057 警告 二進位和檔案內容的 X509Certificate2X509Certificate 建構函式已經過時。
SYSLIB0058 警告 KeyExchangeAlgorithmKeyExchangeStrengthCipherAlgorithmCipherAlgorithmStrengthHashAlgorithmHashStrengthSslStream 屬性已經過時。 請改用 NegotiatedCipherSuite
SYSLIB0059 警告 在程序結束之前,SystemEvents.EventsThreadShutdown 回調不會執行。 請改用 AppDomain.ProcessExit
SYSLIB0060 警告 System.Security.Cryptography.Rfc2898DeriveBytes 上的建構函式已經過時。 請改用 Rfc2898DeriveBytes.Pbkdf2
SYSLIB0061 警告 Queryable Queryable.MaxBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>)Queryable.MinBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>) 採用了 IComparer<TSource> 已過時。 使用新的採用 IComparer<TKey> 的。
SYSLIB0062 警告 XsltSettings.EnableScript 已經過時。

EXTOBS 過時

下表列出 EXTOBS0XXX 程式庫中的 Microsoft.Extensions 過時項目。

診斷識別碼 警告或錯誤 描述
EXTOBS0001 警告 IResourceMonitor 已過時,將在未來的版本中刪除。 請考慮使用 資源監控可觀察工具

隱藏警告

建議您盡可能使用可用的因應措施。 不過,如果您無法變更程式碼,可以透過 #pragma 指令或 <NoWarn> 專案設定來隱藏警告。 如果您必須使用過時的 API,且 SYSLIB0XXX OR EXTOBS0XXX 診斷不會顯示為錯誤,您可以在程式碼或專案檔中隱藏警告。

若要隱藏程式碼中的警告:

// 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>

注意

以這種方式隱藏警告只會停用您指定的淘汰警告。 不會停用其他任何警告,包括具有不同診斷 ID 的過時警告。

另請參閱