次の方法で共有


BinaryFormatterの Windows Presentation Foundation (WPF) 移行ガイド

BinaryFormatter 削除

.NET 9以降、BinaryFormatter では、既知のセキュリティ リスクがサポートされなくなり、その API は、WPF アプリを含め、すべてのプロジェクト型に対して常に PlatformNotSupportedException をスローします。 BinaryFormatter によってもたらされるリスクとその削除の理由については、 BinaryFormatter 移行ガイドを参照してください。

BinaryFormatterの削除により、多くの WPF アプリケーションが影響を受けることが予想されるため、.NET 9 またはそれ以降のバージョンへの移行を完了するための対応が必要になります。

BinaryFormatter が WPF に与える影響

.NET 9 以前では、Windows Presentation Foundation (WPF) は BinaryFormatter を使用して、クリップボード、ドラッグ アンド ドロップ、Journal での読み込み/格納状態などのシナリオでデータをシリアル化および逆シリアル化していました。 .NET 9 以降、 WPF と Windows フォームはこれらのシナリオのために BinaryFormatter の実装のサブセットを内部的に使用します。 BinaryFormatterのリスクは、汎用のシリアル化/逆シリアル化では対処できませんが、既知の一連の集合を使用するこれらの非常に特殊なユース ケースでは、リスクを軽減するための対策が取られています。 不明またはサポートされていない型については、BinaryFormatter へのフォールバックがそのまま実行され、アプリケーションで移行ステップが実行されない限り、PlatformNotSupportedException がスローされます。

WPF と WinForms アプリは、これらの型の配列や一覧に沿って、どちらも次の型を処理します。 クリップボード、ドラッグ アンド ドロップ、Journal での Avalon バインドは、移行手順は必要なく、これらの型で引き続き機能します。

OLE シナリオ

BinaryFormatter の削除がクリップボードやドラッグ アンド ドロップなどの OLE シナリオに与える影響や移行ガイダンスについては、 Windows フォームと Windows Presentation Foundation BinaryFormatter OLE ガイダンスを参照してください。

オブジェクトの読み取り/保存をハンドルするためにフォールバックとして BinaryFormatter を使用した関数を参照できます。OLE シナリオの場合は SaveObjectToHandle および ReadObjectFromHandle です。

ジャーナリング

WPF でナビゲーション履歴を管理しながら、状態を格納したり読み込んだりする必要がある場合。

読み込みまたは保存を行うには、DataStream クラスの LoadSubStreams/ SaveSubStreams を呼び出します。 使用される要素が新しい実装で処理される型に含まれない場合は、 BinaryFormatterが使用されます。

開発者が NavigateGoForward、または GoBackを使用して JournalEntry 内を移動すると、ノードのデータが読み込まれるか、ストリームに保存されて状態が保存されます。 関係する型がシリアル化または逆シリアル化中に本質的に処理されない場合、 BinaryFormatter が使用されます。

参照: DataStream.cs

BinaryFormatter から移行できない .NET 9 ユーザーは、サポートされていない互換性パッケージをインストールできます。 詳細については、「BinaryFormatter 移行ガイド: 互換性パッケージ」をご覧ください。

注意事項

BinaryFormatter は、使用するアプリがサービス拒否 (DoS)、情報漏えい、リモート コード実行などの攻撃のリスクにさらされるため危険であり、推奨されません。 BinaryFormatter がもたらすリスクの詳細については、「BinaryFormatter および関連型の使用における逆シリアル化のリスク」を参照してください。

問題

BinaryFormatter に関して WPF アプリケーションで予期せぬ動作が発生した場合は、dotnet/wpf/issues に問題を報告し、その問題が BinaryFormatter の削除に関連していることを明記してください。