ASP.NET Core 3.1 から 5.0 への移行
この記事では、既存の ASP.NET Core 3.1 プロジェクトを ASP.NET Core 5.0 に更新する方法について説明します。 ASP.NET Core 3.1 から ASP.NET Core 6.0 に移行する手順については、「ASP.NET Core 3.1 から 6.0 への移行」を参照してください。
必須コンポーネント
- ASP.NET および Web 開発ワークロードを含む Visual Studio 2019 16.8 以降
- .NET 5.0 SDK
global.json での .NET Core SDK バージョンの更新
特定の .NET Core SDK バージョンを対象とする global.json ファイルを使用する場合は、version
プロパティを、インストールされる .NET 5.0 SDK バージョンに更新します。 次に例を示します。
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
ターゲット フレームワークを更新する
Blazor WebAssembly プロジェクトを更新する場合は、「Blazor WebAssembly プロジェクトを更新する」セクションに進みます。 その他の ASP.NET Core プロジェクトの種類の場合は、プロジェクト ファイルのターゲット フレームワーク モニカー (TFM) を net5.0
に更新します。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
bin
フォルダーと obj
フォルダーを削除する
bin
および obj
フォルダーの削除が必要になる場合があります。 dotnet nuget locals --clear all
を実行して、NuGet パッケージ キャッシュを消去します。
5.0.1 およびさらに 5.x リリースから 6.0 まででの、Blazor アプリ ルーティング ロジックの変更
ルートの優先順位の評価が、ASP.NET Core 5.0.1 パッチ リリースで変更されました。 これは、キャッチオール ルートまたはオプション パラメーターのあるルートを定義した場合に、影響を与える可能性があります。
以前の動作
ASP.NET Core 5.0.0 以前の動作では、{*slug}
などの優先順位の低いルートが、/customer/{id}
などの優先順位の高いルートより前に照合されます。
新しい動作
ASP.NET Core 5.0.1 以降の新しい動作では、ASP.NET Core アプリで定義されているルーティング動作とより厳密に一致するようになり、最初にフレームワークによって各セグメントのルートの優先順位が計算されて確立され、ルートの長さのみが同じ優先順位のときの 2 次基準として使用されます。
変更理由
Blazor のルーティングによってサポートされる機能のサブセットに対して、Blazor のルーティング システムを ASP.NET Core のルーティング システムと同じように動作させることが目的なので、元の動作は実装でのバグと見なされます。
推奨される操作
App.razor
ファイルの Router
コンポーネントに PreferExactMatches
属性を追加して、正しい動作を選択します。
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
PreferExactMatches
が @true
に設定されている場合、ルートの照合時にワイルドカードよりも完全一致が優先されます。
重要
すべてのアプリで、明示的に PreferExactMatches
を @true
に設定する必要があります。
PreferExactMatches
を @false
に設定したり未設定のままにしたりする機能は、"旧バージョンとの互換性のためだけに用意されています"。
.NET 6 がリリースされると、ルーターは常に完全一致を優先するようになり、PreferExactMatches
オプションは使用できなくなります。
Blazor WebAssembly および Blazor Server プロジェクトを更新する
このセクションのガイダンスは、両方 Blazor ホスティング モデルに適用されます。 このセクションの後のセクションでは、ホスティング モデルとアプリの種類に固有の追加のガイダンスを提供します。 関連するすべてのセクションのガイダンスをアプリに適用します。
Blazor WebAssembly アプリの
wwwroot/index.html
または Blazor Server アプリのPages/_Host.cshtml
で、スタイルの<head>
要素に<link>
要素を追加します。 次の<link>
要素のhref
属性の値で、プレースホルダー{ASSEMBLY NAME}
はアプリのアセンブリ名です。+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
スタンドアロンの Blazor WebAssembly または Blazor Server の例:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
ホストされている Blazor WebAssembly ソリューションの
Client
プロジェクトの例:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
コンポーネントの仮想化のため、アプリの
_Imports.razor
ファイルに新しい名前空間 Microsoft.AspNetCore.Components.Web.Virtualization を含めます。 次の_Imports.razor
ファイルでは、Blazor プロジェクト テンプレートから生成されるアプリでの既定の名前空間が示されています。 プレースホルダー{ASSEMBLY NAME}
は、アプリのアセンブリ名です。Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
MainLayout
コンポーネント (Shared/MainLayout.razor
) では、class
属性がpage
に設定された<div>
要素で、コンポーネントの HTML マークアップを囲みます。<div class="page"> ... </div>
次のファイルを
Shared
フォルダーに追加します。MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
Blazor WebAssembly アプリの最新の基本
wwwroot/css/app.css
ファイルまたは Blazor Server アプリのwwwroot/css/site.css
ファイルのファイルには、次のスタイルが含まれています。 次のスタイルと、自分でアプリに追加したものを残して、余分なスタイルを削除します。次のスタイルシートには、基本スタイルのみが含まれており、開発者によって追加されたカスタム スタイルは含まれていません。
html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
Note
前の例では、Blazor プロジェクト テンプレートで提供される Open Iconic アイコン (
open-iconic-bootstrap.css
) の@import
ディレクティブは表示されません。 Open Iconic は、その管理者が放棄しました。
Blazor WebAssembly プロジェクトの更新
前の「Blazor WebAssembly および Blazor Server プロジェクトを更新する」セクションのガイダンスに従います。
Blazor WebAssembly プロジェクト、およびホストされた Blazor ソリューションの Client
プロジェクトの場合は、プロジェクト ファイルを次のように変更します。
SDK を
Microsoft.NET.Sdk.Web
からMicrosoft.NET.Sdk.BlazorWebAssembly
に更新します。- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Note
この更新プログラムは、スタンドアロンの Blazor WebAssembly プロジェクトと、ホストされた Blazor ソリューションの
Client
プロジェクトにのみ適用されます。次のプロパティを更新します。
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Microsoft.AspNetCore.Components.WebAssembly.Build へのパッケージ参照を削除します。
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
他のパッケージを最新バージョンに更新します。 最新バージョンは、NuGet.org で確認できます。
wwwroot/index.html
で、App
コンポーネントを読み込む要素を、id
がapp
に設定された<div>
要素に変更します。-<app>Loading...</app> +<div id="app">Loading...</div>
Program.Main
(Program.cs
) で、<app>
要素への参照を、ハッシュ#
を追加することで CSS セレクターに変更します。-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
Program.Main
(Program.cs
) で、既定の一時的なHttpClient
登録を、スコープ付きに変更します (存在する場合)。-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
ホストされた Blazor ソリューションの
Client
アプリのProgram.Main
(Program.cs
) で:- 必要に応じて、
builder.HostEnvironment.BaseAddress
を文字列のクライアント ベース アドレスに置き換えます。 - 名前付きの一時クライアント ファクトリの登録を、スコープ付きに変更します。
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
前のコードで、
{APP NAMESPACE}
プレースホルダーはアプリの名前空間です。- 必要に応じて、
Microsoft アカウントを使用するスタンドアロン Blazor WebAssembly アプリ
前の「Blazor WebAssembly および Blazor Server プロジェクトを更新する」と「Blazor WebAssembly プロジェクトの更新」セクションのガイダンスに従います。
Azure portal に登録されているスタンドアロン Blazor WebAssembly アプリで、Microsoft アカウントに Microsoft Entra ID (ME-ID) を使用するには:
アプリには、
openid
およびoffline_access
スコープが必要です。options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Azure portal のアプリ登録の [認証] ブレードで:
- Web プラットフォームの構成を削除します。
- アプリのリダイレクト URI を使用して、シングルページ アプリケーション プラットフォームの構成を追加します。
- [アクセス トークン] と [ID トークン] の [暗黙的な許可] を無効にします。
詳しくは、「Microsoft アカウントを使用して、ASP.NET Core Blazor WebAssembly スタンドアロン アプリをセキュリティで保護する」をご覧ください。
Microsoft Entra ID (ME-ID) を使用したスタンドアロン Blazor WebAssembly アプリ
前の「Blazor WebAssembly および Blazor Server プロジェクトを更新する」と「Blazor WebAssembly プロジェクトの更新」セクションのガイダンスに従います。
Azure portal に登録されているスタンドアロン Blazor WebAssembly アプリで Microsoft Entra ID (ME-ID) を使用するには:
アプリには、
https://graph.microsoft.com/User.Read
スコープが必要です。options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Azure portal のアプリ登録の [認証] ブレードで:
- Web プラットフォームの構成を削除します。
- アプリのリダイレクト URI を使用して、シングルページ アプリケーション プラットフォームの構成を追加します。
- [アクセス トークン] と [ID トークン] の [暗黙的な許可] を無効にします。
詳しくは、「Microsoft Entra ID を使用して、ASP.NET Core Blazor WebAssembly スタンドアロン アプリをセキュリティで保護する」をご覧ください。
Azure Active Directory (AAD) B2C を使用するスタンドアロンの Blazor WebAssembly アプリ
前の「Blazor WebAssembly および Blazor Server プロジェクトを更新する」と「Blazor WebAssembly プロジェクトの更新」セクションのガイダンスに従います。
Azure portal に登録されているスタンドアロン Blazor WebAssembly アプリで、Azure Active Directory (AAD) B2C を使用するには:
アプリには、
openid
およびoffline_access
スコープが必要です。options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Azure portal のアプリ登録の [認証] ブレードで:
- Web プラットフォームの構成を削除します。
- アプリのリダイレクト URI を使用して、シングルページ アプリケーション プラットフォームの構成を追加します。
- [アクセス トークン] と [ID トークン] の [暗黙的な許可] を無効にします。
詳しくは、「Azure Active Directory B2C を使用して、ASP.NET Core Blazor WebAssembly スタンドアロン アプリをセキュリティで保護する」をご覧ください。
Microsoft Entra ID (ME-ID) または AAD B2C を使用してホストされている Blazor WebAssembly アプリ
前の「Blazor WebAssembly および Blazor Server プロジェクトを更新する」と「Blazor WebAssembly プロジェクトの更新」セクションのガイダンスに従います。
ユーザー認証に AAD または AAD B2C を使用するホストされた Blazor ソリューションの Client
アプリ登録では、シングルページ アプリケーションの Azure Apps プラットフォーム構成を使用する必要があります。
Azure portal の Client
アプリ登録の [認証] ブレードで:
- Web プラットフォームの構成を削除します。
- アプリのリダイレクト URI を使用して、シングルページ アプリケーション プラットフォームの構成を追加します。
- [アクセス トークン] と [ID トークン] の [暗黙的な許可] を無効にします。
詳細については、以下を参照してください:
- ホストされている ASP.NET Core Blazor WebAssembly アプリを Microsoft Entra ID でセキュリティ保護する
- ASP.NET Core Blazor WebAssembly でホストされるアプリを Azure Active Directory B2C でセキュリティ保護する
ホストされた Blazor ソリューションの Server プロジェクトを更新する
これまでのセクションのガイダンスに従います。
- Blazor WebAssembly および Blazor Server プロジェクトを更新する
- Blazor WebAssembly プロジェクトの更新
- Azure Active Directory に関してアプリのプロバイダーに適用されるセクション。
この記事の一般的なガイダンスに従って、ASP.NET Core アプリとしてホストされた Blazor ソリューションの Server
プロジェクトを更新します。
さらに、Microsoft Entra ID (ME-ID) または B2C を使用してクライアント Blazor WebAssembly アプリに対してユーザーを認証する Server
プロジェクトでは、新しい Microsoft Identity v2.0 パッケージを採用する必要があります。
AAD の場合:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
AAD B2C の場合:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
前記のパッケージ参照については、NuGet.org で {VERSION}
プレースホルダーのパッケージ バージョンを確認します。
Note
ホストされた Blazor WebAssembly ソリューションの Server
プロジェクトの SDK は、Microsoft.NET.Sdk.Web
のままです。
<Project Sdk="Microsoft.NET.Sdk.Web">
詳細については、以下を参照してください:
- ホストされている ASP.NET Core Blazor WebAssembly アプリを Microsoft Entra ID でセキュリティ保護する
- ASP.NET Core Blazor WebAssembly でホストされるアプリを Azure Active Directory B2C でセキュリティ保護する
ソリューションをクリーンアップしてリビルドする
アプリまたはソリューションを .NET 5 に移行した後、アプリまたはソリューションをクリーンアップしてリビルドします。 新しいパッケージ参照とキャッシュされたパッケージの間に、パッケージの非互換性が存在する場合:
コマンド シェルで次の
dotnet nuget locals
コマンドを実行して、NuGet パッケージ キャッシュをクリアします。dotnet nuget locals --clear all
アプリまたはソリューションをクリーンアップしてリビルドします。
トラブルシューティング
Blazor WebAssembly のセキュリティに関するトピックの最後にある "トラブルシューティング" ガイダンスで、アプリに適用されるものに従います。
スタンドアロン Blazor WebAssembly アプリ:
- OIDC プロバイダーと WebAssembly 認証ライブラリ向けの一般的なガイダンス
- Microsoft アカウント
- Microsoft Entra ID (ME-ID)
- Azure Active Directory (AAD) B2C
ホストされている Blazor WebAssembly アプリ:
Microsoft Entra ID (ME-ID) で承認されないクライアント
認証に AAD を使用する Blazor WebAssembly アプリをアップグレードすると、ユーザーが AAD でサインインした後に、アプリへのログイン コールバックで次のエラーを受け取る場合があります。
情報:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] 承認に失敗しました。 次の要件が満たされていません。DenyAnonymousAuthorizationRequirement:認証済みユーザーが必要です。
AAD からのログイン コールバック エラー:
- エラー:
unauthorized_client
- 説明:
AADB2C90058: The provided application is not configured to allow public clients.
このエラーを解決するには:
- Azure portal で、アプリのマニフェストにアクセスします。
allowPublicClient
属性をnull
またはtrue
に設定します。
Blazor プログレッシブ Web アプリケーション (PWA) を更新する
PWA アプリのプロジェクト ファイルに次の項目を追加します。
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
プレビューの CSS 分離スタイルシートのリンクを削除する
プロジェクトの wwwroot/index.html
(Blazor WebAssembly) または Pages/_Host.cshtml
(Blazor Server) に、以前の 5.0 プレビュー リリースの scoped.styles.css
のスタイルシートの <link>
要素が含まれている場合は、<link>
タグを削除します。
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Razor クラス ライブラリ (RCL) を更新する
ASP.NET Core 5.0 の一部として導入された新しい API または機能を利用するため、Razor クラス ライブラリ (RCL) を移行します。
コンポーネントを対象とする RCL を更新するには:
プロジェクト ファイルで次のプロパティを更新します。
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
他のパッケージを最新バージョンに更新します。 最新バージョンは、NuGet.org で確認できます。
MVC を対象とする RCL を更新するには、プロジェクト ファイルで次のプロパティを更新します。
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
パッケージ参照の更新
プロジェクト ファイルで、Microsoft.AspNetCore.*、Microsoft.EntityFrameworkCore.*、Microsoft.Extensions.*、System.Net.Http.Json の各パッケージ参照の Version
属性を 5.0.0 以降に更新します。 次に例を示します。
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6">
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
- <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
Docker イメージの更新
Docker を使用するアプリの場合、Dockerfile の FROM
ステートメントとスクリプトを更新します。 ASP.NET Core 5.0 ランタイムを含む基本イメージを使用します。 ASP.NET Core 3.1 と 5.0 の間では、docker pull
コマンドに次の違いがあることに注意してください。
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
製品名が ".NET" に変わるのに伴い、Docker イメージは mcr.microsoft.com/dotnet/core
リポジトリから mcr.microsoft.com/dotnet
に移動されました。 詳しくは、dotnet/dotnet-docker#1939 をご覧ください。
ASP.NET Core MVC と Razor Pages でのモデル バインドの変更
DateTime 値は UTC 時刻としてモデル バインドされる
ASP.NET Core 3.1 以前では、DateTime
値はローカル時刻としてモデル バインドされ、タイム ゾーンはサーバーによって決定されました。 入力書式 (JSON) からバインドされた DateTime
値と DateTimeOffset
値は、UTC タイム ゾーンとしてバインドされました。
ASP.NET Core 5.0 以降のモデル バインドでは、DateTime
値は一貫して UTC タイム ゾーンとバインドされます。
以前の動作を維持するには、Startup.ConfigureServices
の DateTimeModelBinderProvider
を削除します。
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider\ComplexObjectModelBinder による ComplexTypeModelBinderProvider\ComplexTypeModelBinder の置き換え
C# 9 レコード型のモデル バインドのサポートを追加するため、ComplexTypeModelBinderProvider は次のようになります。
- 古い形式として注釈付けされます。
- 既定では登録されなくなります。
ModelBinderProviders
コレクションに ComplexTypeModelBinderProvider
が存在することに依存するアプリでは、新しいバインダー プロバイダーを参照する必要があります。
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage の廃止
個々のユーザー アカウントに対するオプションが含まれる ASP.NET Core 3.1 のテンプレートでは、UseDatabaseErrorPage の呼び出しが生成されます。 UseDatabaseErrorPage
は古くなり、次のコードに示すように、AddDatabaseDeveloperPageExceptionFilter
と UseMigrationsEndPoint
の組み合わせに置き換える必要があります。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
+ services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
+ app.UseMigrationsEndPoint();
- app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
詳細については、こちらの GitHub の問題のページを参照してください。
ASP.NET Core モジュール (ANCM)
Visual Studio のインストール時に ASP.NET Core モジュール (ANCM) が選択されたコンポーネントではなかった場合、または ANCM の以前のバージョンがシステムにインストールされていた場合は、最新の .NET Core ホスティング バンドル インストーラー (直接ダウンロード) をダウンロードし、インストーラーを実行します。 詳細については、ホスティング バンドルに関するページを参照してください。
一部の NuGet パッケージに影響するパッケージ参照の変更
dotnet/runtime に対する dotnet/拡張機能コンテンツの移行と dotnet/aspnetcore (aspnet/Announcements #411) に説明があるように、dotnet/extensions リポジトリから dotnet/runtime に一部の Microsoft.Extensions.*
NuGet パッケージを移行するとき、移行されたパッケージの一部にパッケージングの変更が適用されます。 これらの変更により、多くの場合、.NET API の名前空間が変更されます。
5.0 への移行時にアプリ名前空間の変更に関する API をさらに調査するには、.NET API ブラウザーを使用します。
Microsoft.Identity.Web の移行
次の Wiki ページでは、Microsoft を移行する方法について説明します。Identity。ASP.NET Core 3.1 から 5.0 への Web の移行:
次のチュートリアルでは、移行についても説明します。
- 組織の Microsoft identity プラットフォームを持つ ASP.NET Core Web アプリのサインイン ユーザー 。 「オプション 2: コマンド ラインからサンプルを作成する」を参照してください。
- WPF Desktop アプリケーションで Microsoft identity プラットフォームを使用してユーザーをサインインさせ、ASP.NET Core Web API を呼び出。 「コードの作成方法」を参照してください。
破壊的変更の確認
.NET Core 3.1 から .NET 5.0 への破壊的変更については、バージョン 3.1 から 5.0 への移行の破壊的変更に関するページをご覧ください。 一覧には、ASP.NET Core と Entity Framework Core も含まれます。
ASP.NET Core