次の方法で共有


BinaryFormatter シリアル化 API でコンパイラ エラーが生成される

BinaryFormatter の長期的な非推奨計画の一環として、我々は引き続きライブラリからBinaryFormatter機能を削減し、開発者がこの型から移行できるように促しています。 .NET 7 以降では、次の API を呼び出して、すべての C# および Visual Basic プロジェクトの種類でコンパイル時エラーが発生します。

以前の動作

.NET 5 以降、影響を受けるSerializeメソッドと Deserialize メソッドを使用すると、ID を持つコンパイラSYSLIB0011が生成されました。 詳細については、「 BinaryFormatter シリアル化メソッドは廃止され、ASP.NET アプリ (.NET 5)では禁止されています」を参照してください。

Exception.SerializeObjectState イベントを使用した場合、エラーは発生しませんでした。

新しい動作

.NET 7 以降では、 影響を受ける API のいずれかを コードで使用すると、同じ ID のコンパイラ エラー が生成 SYSLIB0011。 プロジェクトが次のすべての条件を満たしている場合、影響を受けます。

  • これは C# または Visual Basic プロジェクトです。
  • net7.0以上を対象とします。
  • 影響を受ける API の 1 つを直接呼び出します。
  • SYSLIB0011警告コードがまだ抑制されていません。

導入されたバージョン

.NET 7

破壊的変更の種類

この変更は ソースの互換性に影響を与える可能性があります。

変更の理由

BinaryFormatter の長期的な非推奨計画の一環として、我々は引き続きライブラリからBinaryFormatter機能を削減し、開発者がこの型から移行できるように促しています。

最善の措置は、セキュリティと信頼性の欠陥のために BinaryFormatter から移行することです。 BinaryFormatter は、将来のリリースで .NET から削除される可能性があります。 .NET ライブラリ チームは、 System.HalfSystem.DateOnly などの最近の型が BinaryFormatterと互換性がないという姿勢を既に取っています。

エラーを抑制する必要がある場合は、元の廃止に関する記事のガイドラインに従って行うことができます。 (.NET 5/6 の動作に一致するように) エラーを警告に変換するプロジェクト プロパティを設定することで、プロジェクト全体でエラーを無効にすることもできます。

Warnung

このプロパティを設定すると、ホストの動作が変わる可能性があります。 <EnableUnsafeBinaryFormatterSerialization> プロパティを参照してください。

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

"エラーとして警告" を有効にしてプロジェクトをコンパイルしても、コンパイルは失敗します。 (これは、.NET 5 および .NET 6 SDK に付属している動作と一致します)。その場合でも、ソースまたはプロジェクト ファイルのSYSLIB0011要素で<NoWarn>警告を抑制する必要があります。

<EnableUnsafeBinaryFormatterSerialization> プロパティ

<EnableUnsafeBinaryFormatterSerialization プロパティは .NET 5 で導入されました。 .NET 7 では、このスイッチの動作が変更され、 コンパイルとホスト の実行時動作の両方が制御されます。 このスイッチの意味は、次の表に示すように、プロジェクトの種類によって異なります。

プロジェクトの種類 プロパティがtrueに設定されました プロパティがfalseに設定されました プロパティを省略しました
ライブラリ/共有コンポーネント1 影響を受ける API は、警告として廃止されています。 "アプリケーションで「警告をエラーとして処理する」が有効でない、またはSYSLIB0011警告コードを抑制している場合、コンパイルは成功します。" 影響を受ける API はエラーとして廃止されており、エラーが抑制されない限り、コンパイル時にコードからそれらの API への呼び出しは失敗します。 ( falseの場合と同じです)。
Blazor と MAUI アプリ2 BinaryFormatterの呼び出しは実行時に失敗します。 BinaryFormatterの呼び出しは実行時に失敗します。 BinaryFormatterの呼び出しは実行時に失敗します。
ASP.NET アプリ 影響を受ける API は、警告として廃止されています。 "アプリケーションで「警告をエラーとして処理する」が有効でない、またはSYSLIB0011警告コードを抑制している場合、コンパイルは成功します。" ランタイムは、呼び出しがコードから発生したか、使用した依存関係から発生したかに関係なく、の呼び出しをBinaryFormatterします。 影響を受ける API はエラーとして廃止されており、エラーが抑制されない限り、コンパイル時にコードからそれらの API への呼び出しは失敗します。 ランタイムは、呼び出しがコードから発生したか、使用した依存関係から発生したかに関係なく、の呼び出しをBinaryFormatterします。 ( falseの場合と同じです)。
デスクトップ アプリとその他のすべてのアプリの種類 影響を受ける API は、警告として廃止されています。 "アプリケーションで「警告をエラーとして処理する」が有効でない、またはSYSLIB0011警告コードを抑制している場合、コンパイルは成功します。" ランタイムは、呼び出しがコードから発生したか、使用した依存関係から発生したかに関係なく、の呼び出しをBinaryFormatterします。 影響を受ける API はエラーとして廃止されており、エラーが抑制されない限り、コンパイル時にコードからそれらの API への呼び出しは失敗します。 ランタイムは、呼び出しがコードから発生したか、使用した依存関係から発生したかに関係なく、の呼び出しをBinaryFormatterします。 影響を受ける API はエラーとして廃止されており、エラーが抑制されない限り、コンパイル時にコードからそれらの API への呼び出しは失敗します。 ランタイムは、呼び出しがコードから発生したか、使用した依存関係から発生したかに関係なく、の呼び出しをBinaryFormatterします。

1ランタイム ポリシーは、アプリ ホストによって制御されます。 BinaryFormatterがライブラリのプロジェクト ファイル内で<EnableUnsafeBinaryFormatterSerialization>に設定されている場合でも、trueの呼び出しは実行時に失敗する可能性があります。 ライブラリは、アプリ ホストのランタイム ポリシーをオーバーライドできません。

2Blazor ランタイムと MAUI ランタイムは、 BinaryFormatterの呼び出しを禁止します。 <EnableUnsafeBinaryFormatterSerialization>に設定した値に関係なく、呼び出しは実行時に失敗します。 Blazor または MAUI アプリケーションから、または Blazor または MAUI アプリで使用されることを意図したライブラリからこれらの API を呼び出さないでください。

影響を受ける API

こちらも参照ください