SYSLIB0057:二進位和檔案內容的 X509Certificate2 和 X509Certificate 建構函式已過時
從 .NET 9 開始,X509Certificate 和 X509Certificate2 上接受內容為 byte[]
、ReadOnlySpan<byte>
或 string
檔案路徑的建構函式已過時。 X509Certificate2Collection 上的 Import 方法也已經過時。 在程式碼中呼叫這些方法會導致在編譯時間產生警告 SYSLIB0057
。
淘汰的原因
受影響的 API 支援以多種格式載入憑證。 例如,new X509Certificate2(data)
已從名為 data
的 byte[]
載入憑證。 data
可以是任何支援的格式之一,包括 X.509、PKCS7 或 PKCS12/PFX。
雖然這個方法很容易使用,但會造成以非預期格式傳遞使用者提供資料的問題。 此方法可能會在僅預期載入 X.509 內容的位置,載入 PKCS12。 或者,可能會因以不同的方式處理資料而造成互通性問題。
因應措施
根據預期的內容類型,使用不同的 API 來載入憑證內容。
稱為 X509CertificateLoader
的新類別可用來載入 X.509 或 PKCS12 內容:
- 如果您要載入 X.509 內容,請使用
X509CertificateLoader.LoadCertificate
或X509CertificateLoader.LoadCertificateFromFile
。 - 如果您要載入 PKCS12 內容, 請使用
X509CertificateLoader.LoadPkcs12
、X509CertificateLoader.LoadPkcs12FromFile
、X509CertificateLoader.LoadPkcs12Collection
或X509CertificateLoader.LoadPkcs12CollectionFromFile
。 - 如果您要載入 PKCS7 內容,請使用 System.Security.Cryptography.Pkcs 套件中的 SignedCms 檢查 PKCS7 內容中的憑證。
- 如果您不確定要載入的內容類型,請使用 GetCertContentType 來判斷內容類型,並呼叫適當的 API。
Microsoft.Bcl.Cryptography 套件 (英文) 針對 .NET Framework 和 .NET Standard 提供 X509CertificateLoader
。
隱藏警告
若您必須使用已淘汰的 API,您可以在程式碼或專案檔中隱藏警告。
若要只隱藏單一違規,請將前置處理器指示詞新增至原始程式碼檔案,以停用並重新啟用警告。
// Disable the warning.
#pragma warning disable SYSLIB0057
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0057
若要隱藏專案中的所有 SYSLIB0057
警告,請將 <NoWarn>
屬性新增至專案檔。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
</PropertyGroup>
</Project>
如需詳細資訊,請參閱隱藏警告。