BinaryFormatter シリアル化メソッドが古い形式になり、ASP.NET アプリでは使用不可に
BinaryFormatter、Formatter、および IFormatter の Serialize
と Deserialize
のメソッドが古いと見なされ、警告が示されるようになりました。 また、ASP.NET アプリでは、BinaryFormatter のシリアル化が既定で禁止されます。
注意
.NET 7 では、affected APIs は "エラー" として廃止されています。 詳細については、「BinaryFormatter シリアル化 API でコンパイラ エラーが発生する」を参照してください。
変更の説明
BinaryFormatter のセキュリティ脆弱性により、次のメソッドは古いと見なされ、ID SYSLIB0011
のコンパイル時警告が生成されるようになりました。 また、ASP.NET Core 5.0 以降のアプリでは、Web アプリによって BinaryFormatter 機能が再有効化されていない限り、NotSupportedException がスローされます。
次のシリアル化メソッドも古いと見なされ、警告 SYSLIB0011
が生成されますが、動作変更はありません。
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
導入されたバージョン
5.0
変更理由
.NET エコシステム内における BinaryFormatter の使用を段階的に縮小するための取り組みの一環として、これらのメソッドが古い形式としてマークされています。
推奨アクション
コードでの BinaryFormatter の使用を停止してください。 代わりに、JsonSerializer または XmlSerializer の使用を検討してください。 詳しくは、「BinaryFormatter セキュリティ ガイド」をご覧ください。
BinaryFormatter のコンパイル時の警告 (
SYSLIB0011
) を一時的に抑制することができます。 このオプションを選択する前に、リスクについてコードを十分に評価することをお勧めします。 警告を抑制する最も簡単な方法は、個々の呼び出しサイトを#pragma
ディレクティブで囲むことです。// Now read the purchase order back from disk using (var readStream = new FileStream("myfile.bin", FileMode.Open)) { var formatter = new BinaryFormatter(); #pragma warning disable SYSLIB0011 return (PurchaseOrder)formatter.Deserialize(readStream); #pragma warning restore SYSLIB0011 }
また、プロジェクト ファイルで警告を抑制することもできます。
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
プロジェクト ファイルで警告を抑制すると、プロジェクト内のすべてのコード ファイルに対して警告が抑制されます。
SYSLIB0011
を抑制しても、他の古い API の使用によって発生した警告は抑制されません。ASP.NET アプリで引き続き BinaryFormatter を使用する場合は、プロジェクト ファイルで再有効化することができます。 ただし、そうしないことを強くお勧めします。 詳しくは、「BinaryFormatter セキュリティ ガイド」をご覧ください。
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
推奨される操作の詳細については、「BinaryFormatter の廃止と無効化に関するエラーの解決」をご覧ください。
影響を受ける API
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)
こちらもご覧ください
.NET