BinaryFormatter シリアル化メソッドが古い形式になり、ASP.NET アプリでは使用不可に

BinaryFormatterFormatter、および IFormatterSerializeDeserialize のメソッドが古いと見なされ、警告が示されるようになりました。 また、ASP.NET アプリでは、BinaryFormatter のシリアル化が既定で禁止されます。

変更の説明

セキュリティ脆弱性により、次のメソッドは古いと見なされ、ID SYSLIB0011 のコンパイル時警告が生成されるようになりました。 また、ASP.NET Core 5.0 以降のアプリでは、Web アプリによって BinaryFormatter 機能が再有効化されていない限り、NotSupportedException がスローされます。

次のシリアル化メソッドも古いと見なされ、警告 SYSLIB0011 が生成されますが、動作変更はありません。

導入されたバージョン

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

関連項目