Serialize
、Deserialize
、および BinaryFormatter の Formatter と IFormatter のメソッドが古いと見なされ、警告が示されるようになりました。 また、ASP.NET アプリでは、 BinaryFormatter シリアル化は既定で禁止されています。
注
.NET 7 では、影響を受ける API はエラーとして廃止されています。 詳細については、「 BinaryFormatter シリアル化 API でコンパイラ エラーが発生する」を参照してください。
変更の説明
のBinaryFormatterにより、次のメソッドが廃止され、ID SYSLIB0011
を含むコンパイル時の警告が生成されるようになりました。 さらに、ASP.NET Core 5.0 以降のアプリでは、Web アプリがNotSupportedException機能を再び有効にしない限り、BinaryFormatterを投げます。
次のシリアル化メソッドも廃止され、警告 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