Windows Presentation Foundation (WPF) 的 BinaryFormatter 移轉指南
BinaryFormatter 移除。
從 .NET 9 開始,由於存在已知的BinaryFormatter,且其 API 一律會對所有專案類型擲回 ,包括 PlatformNotSupportedException 應用程式,因此 WPF 不再受到支援。 如需了解 BinaryFormatter 所造成的風險及移除的理由,請參閱 BinaryFormatter 的移轉指南。
BinaryFormatter 移除後,預計許多 WPF 應用程式會受到影響,因此您必須採取行動來完成移轉至 .NET 9 或後續版本的動作。
BinaryFormatter 如何影響 WPF
在 .NET 9 以前,Windows Presentation Foundation (WPF) 會使用 BinaryFormatter 來序列化和還原序列化用於剪貼簿、拖放,以及在日誌中載入/儲存狀態等情境的資料。 從 .NET 9 開始,WPF 和 Windows Forms 會在內部針對這些情境使用 BinaryFormatter 的實作子集。 雖然在一般用途的序列化/還原序列化中,BinaryFormatter 的風險無法解決,但我們已採取措施對這些具有已知類型組合的極特定使用案例來降低風險。 至於類型未知或不支援者,仍然可以還原為 BinaryFormatter,這種情況下,除非在應用程式採取移轉步驟,否則它會擲回 PlatformNotSupportedException。
WPF 和 WinForms 應用程式都可處理下列類型,以及這些類型的陣列和清單。 剪貼簿、拖放和日誌中的 Avalon 繫結會繼續使用這些類型,不需要任何移轉步驟。
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
OLE 案例
如需了解 BinaryFormatter 的移除對於剪貼簿和拖放等 OLE 情境的影響,請參閱 Windows Forms 和 Windows Presentation Foundation 的 BinaryFormatter OLE 移轉指引。
您可以參考我們將 BinaryFormatter 當作讀取/儲存物件的後援來處理的函式:OLE 情境的 SaveObjectToHandle 和 ReadObjectFromHandle
日誌記錄
如果我們需要儲存或載入狀態,同時要管理 WPF 的瀏覽記錄。
若要載入/儲存,我們會呼叫 類別的 / DataStream
。 如果所用元素不是新的實作所處理的已知類型,則會改用 BinaryFormatter。
當開發人員使用 Navigate
、 GoForward
或 GoBack
流覽 JournalEntry 時,節點的數據會載入或儲存至資料流以儲存狀態。 如果在序列化/還原序列化期間,參與的類型本質上未經處理,系統會使用 BinaryFormatter。
相容性因應措施 (不建議使用)
無法從 BinaryFormatter 移轉的 .NET 9 用戶可以安裝不支援的相容性套件。 如需詳細資訊,請參閱 BinaryFormatter 移轉指南:相容性套件。
警告
BinaryFormatter 很危險,會讓使用中的應用程式面臨攻擊風險,例如阻斷服務 (DoS)、資訊洩漏或遠端程式碼執行,因此不建議使用。 如需詳細了解 BinaryFormatter 所造成的風險,請參閱使用 BinaryFormatter 和相關類型的還原序列化風險。
問題
如果您在 WPF 應用程式遇到 BinaryFormatter未預期的行為,請在 dotnet/wpf/issues 提出問題,並指出問題與移除 BinaryFormatter有關。