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

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

注意

.NET 7 では、affected APIs は "エラー" として廃止されています。 詳細については、「BinaryFormatter シリアル化 API でコンパイラ エラーが発生する」を参照してください。

変更の説明

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

こちらもご覧ください