.NET 5 での破壊的変更

アプリを .NET 5 に移行する場合、ここに一覧表示されている破壊的変更が影響する可能性があります。 変更は、ASP.NET Core や暗号化などの技術領域ごとにグループ化されています。

この記事では、各破壊的変更を "バイナリ非互換" または "ソース非互換" として分類しています。

  • バイナリ非互換 - 既存のバイナリの動作に破壊的変更が発生する可能性があります (読み込みや実行の失敗、異なる実行時の動作など)。
  • ソース非互換 - 新しいランタイムをターゲットにするとき、または新しい SDK やコンポーネントを使用するときに、ソース コードの動作に破壊的変更が発生する可能性があります。 動作変更には、コンパイル エラーや異なる実行時の動作が含まれる場合があります。

ASP.NET Core

Title バイナリ互換 ソース互換
ASP.NET Core アプリによって引用符で囲まれた数値が逆シリアル化される ✔️
AzureAD.UI および AzureADB2C.UI の API が非推奨になった ✔️
BinaryFormatter シリアル化メソッドが非推奨になった ✔️
エンドポイント ルーティングのリソースは HttpContext ✔️
Microsoft というプレフィックスが付いた Azure 統合パッケージが削除された ✔️
Blazor:Blazor アプリにおけるルート優先順位のロジックの変更 ✔️
Blazor:ブラウザー サポートの更新 ✔️ ✔️
Blazor: 意味のない空白文字がコンパイラによって切り捨てられる ✔️
Blazor: JSObjectReference および JSInProcessObjectReference 型が internal に ✔️
Blazor:NuGet パッケージのターゲット フレームワークを変更 ✔️
Blazor:ProtectedBrowserStorage 機能を共有フレームワークに移行 ✔️
Blazor: RenderTreeFrame の readonly のパブリック フィールドがプロパティになった ✔️
Blazor:静的な Web アセットの検証ロジックの更新 ✔️
暗号化 API がブラウザーでサポートされない ✔️
拡張機能:パッケージ参照が変更される ✔️
Kestrel と IIS BadHttpRequestException の型が非推奨になった ✔️
IHttpClientFactory ログの整数状態コードによって作成された HttpClient インスタンス ✔️
HttpSys:既定で無効になっているクライアント証明書の再ネゴシエーション ✔️
IIS:UrlRewrite ミドルウェア クエリ文字列は保持されます ✔️
Kestrel: 構成変更が既定で検出される ✔️
Kestrel:既定でサポートされている TLS プロトコル バージョンの変更 ✔️
Kestrel:互換性のない Windows バージョンでの TLS 経由の HTTP/2 の無効化 ✔️ ✔️
Kestrel:非推奨としてマークされている Libuv トランスポート ✔️
ConsoleLoggerOptions の古いプロパティ ✔️
ResourceManagerWithCultureStringLocalizer クラスと WithCulture インターフェイス メンバーを削除 ✔️
Pubternal API が削除された ✔️
ローカライズ ミドルウェア要求で古いコンストラクターを削除 ✔️
ミドルウェア: 非推奨とマークされたデータベース エラー ページ ✔️
例外ハンドラー ミドルウェアから元の例外がスローされる ✔️ ✔️
ObjectModelValidator で Validate の新しいオーバーロードが呼び出される ✔️
Cookie 名のエンコードを削除 ✔️
IdentityModel NuGet パッケージのバージョンを更新 ✔️
SignalR:MessagePack ハブ プロトコル オプションの種類を変更 ✔️
SignalR:MessagePack ハブ プロトコルの移動 ✔️
UseSignalR メソッドと UseConnections メソッドが削除された ✔️
CSV コンテンツ タイプが標準準拠に変更されました ✔️

コード分析

タイトル バイナリ互換 ソース互換
CA1416 警告 ✔️
CA1417 警告 ✔️
CA1831 警告 ✔️
CA2013 警告 ✔️
CA2014 警告 ✔️
CA2015 警告 ✔️
CA2200 警告 ✔️
CA2247 警告 ✔️

Core .NET ライブラリ

Title バイナリ互換 ソース互換
単一ファイル発行のアセンブリ関連 API が変更された ✔️
BinaryFormatter シリアル化メソッドが非推奨になった ✔️
コード アクセス セキュリティ API が非推奨になった ✔️
CreateCounterSetInstance で InvalidOperationException がスローされる ✔️
既定の ActivityIdFormat は W3C ✔️
Environment.OSVersion で正しいバージョンが返される ✔️
FrameworkDescription の値が .NET Core ではなく .NET になる ✔️
GAC API が非推奨になった ✔️
ハードウェア固有の IsSupported チェック ✔️
IntPtr と UIntPtr の IFormattable 実装 ✔️
LastIndexOf が空の検索文字列を処理する ✔️
Unix 上で URI パスに ASCII 以外の文字が含まれる ✔️
既定以外の診断 ID を持つ API の旧型式化 ✔️
ConsoleLoggerOptions の古いプロパティ ✔️
LINQ OrderBy.First が複雑 ✔️
OSPlatform 属性の名前変更または削除 ✔️
Microsoft.DotNet.PlatformAbstractions パッケージの削除 ✔️
PrincipalPermissionAttribute は旧型式 ✔️
プレビュー バージョンからパラメーター名が変更される ✔️
参照アセンブリのパラメーター名が変更される ✔️
リモート API は旧型式 ✔️
Activity.Tags リストの順序が逆になっている ✔️
SSE および SSE2 の比較メソッドが NAN を処理する ✔️
Thread.Abort は古い形式です ✔️
Unix での UNC パスの URI 認識 ✔️
UTF-7 コード パスが古い形式に ✔️
Vector2.Lerp と Vector4.Lerp の動作の変更 ✔️
Vector<T> が NotSupportedException をスローする ✔️

暗号化

タイトル バイナリ互換 ソース互換
暗号化 API がブラウザーでサポートされない ✔️
Cryptography.Oid は初期化専用 ✔️
Linux 上の既定の TLS 暗号スイート ✔️
暗号抽象化での Create() オーバーロードが非推奨になった ✔️
既定の FeedbackSize 値が変更された ✔️

Entity Framework Core

EF Core 5.0 での破壊的変更

グローバリゼーション

Title バイナリ互換 ソース互換
Windows で ICU ライブラリが使用される ✔️
StringInfo と TextElementEnumerator が UAX29 に準拠する ✔️
Latin-1 文字の Unicode カテゴリが変更された ✔️
TextInfo.ListSeparator 値の変更 ✔️

Interop

タイトル バイナリ互換 ソース互換
WinRT のサポートが削除された ✔️
RCW を InterfaceIsIInspectable にキャストすると例外がスローされる ✔️
Windows 以外のプラットフォームでは A/W サフィックスのプローブは行われません ✔️

ネットワーク

Title バイナリ互換 ソース互換
Cookie パスの処理が RFC 6265 に準拠している ✔️
LocalEndPoint が SendToAsync を呼び出した後に更新される ✔️
MulticastOption.Group が null を受け付けない ✔️
ストリームが連続した Begin 操作を許可する ✔️
.NET ランタイムからの WinHttpHandler の削除 ✔️

SDK

Title バイナリ互換 ソース互換
Directory.Packages.props ファイルが既定でインポートされる ✔️
実行可能プロジェクトによって、不一致の実行可能プロジェクトが参照されたときに生成されるエラー ✔️
FrameworkReference が Windows SDK の WindowsSdkPackageVersion に置き換えられました ✔️
NETCOREAPP3_1 プリプロセッサ シンボルが定義されない ✔️
OutputType が WinExe に設定される ✔️
PublishDepsFilePath の動作の変更 ✔️
TargetFramework が netcoreapp から net に変更される ✔️
WinForms と WPF アプリで Microsoft.NET.Sdk が使用される ✔️

セキュリティ

タイトル バイナリ互換 ソース互換
コード アクセス セキュリティ API が非推奨になった ✔️
PrincipalPermissionAttribute は旧型式 ✔️
UTF-7 コード パスが古い形式に ✔️

シリアル化

Title バイナリ互換 ソース互換
BinaryFormatter.Deserialize で例外が再ラップされる ✔️
JsonSerializer.Deserialize によって 1 文字の文字列が求められる ✔️
ASP.NET Core アプリによって引用符で囲まれた数値が逆シリアル化される ✔️
JsonSerializer.Serialize によって ArgumentNullException がスローされる ✔️
非パブリック、パラメーターなしのコンストラクターが逆シリアル化に使用されない ✔️
キーと値のペアをシリアル化するときにオプションが受け入れられる ✔️

Windows フォーム

Title バイナリ互換 ソース互換
ネイティブ コードが Windows フォーム オブジェクトにアクセスできない ✔️
OutputType が WinExe に設定される ✔️
DataGridView がカスタム フォントをリセットしない ✔️
メソッドによって ArgumentException がスローされる ✔️
メソッドによって ArgumentNullException がスローされる ✔️
プロパティによって ArgumentOutOfRangeException がスローされる ✔️
TextFormatFlags.ModifyString は古くなっています ✔️
DataGridView の API によって InvalidOperationException がスローされる ✔️
WinForms アプリによって Microsoft.NET.Sdk が使用される ✔️
削除されたステータス バー コントロール ✔️

WPF

タイトル バイナリ互換 ソース互換
OutputType が WinExe に設定される ✔️
WPF アプリによって Microsoft.NET.Sdk が使用される ✔️