ASP.NET Core 3.1 から 6.0 への移行
この記事では、既存の ASP.NET Core 3.1 プロジェクトを ASP.NET Core 6.0 に更新する方法について説明します。 ASP.NET Core 5.0 から 6.0 にアップグレードするには、「ASP.NET Core 5.0 から 6.0 に移行する」を参照してください。
前提条件
- Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
- .NET 6.0 SDK
global.json
で .NET Core SDK バージョンを更新する
特定の .NET SDK バージョンを対象とする global.json
ファイルを使用する場合は、version
プロパティを、インストールされる .NET 6.0 SDK バージョンに更新します。 次に例を示します。
{
"sdk": {
- "version": "3.1.200"
+ "version": "6.0.100"
}
}
ターゲット フレームワークを更新する
プロジェクト ファイルのターゲット フレームワーク モニカー (TFM) を net6.0
に更新します。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
パッケージ参照の更新
プロジェクト ファイルで、各 Microsoft.AspNetCore.*
、Microsoft.EntityFrameworkCore.*
、Microsoft.Extensions.*
および System.Net.Http.Json
パッケージ参照の Version
属性を 6.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="6.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>
bin
フォルダーと obj
フォルダーを削除する
bin
および obj
フォルダーの削除が必要になる場合があります。 dotnet nuget locals --clear all
を実行して、NuGet パッケージ キャッシュを消去します。
最小ホスティング モデル
ASP.NET Core テンプレートは、新しい最小ホスティング モデルを使用してコードを生成します。 最小ホスティング モデルでは、Startup.cs
と Program.cs
を 1 つの Program.cs
ファイルに統合します。 ConfigureServices
と Configure
は使用されなくなりました。 ASP.NET Core 3.1 から 6.0 に移行するアプリでは、Startup
を使用して最小ホスティング モデルを使用する必要はありません。また、ASP.NET Core 3.1 テンプレートで使用される汎用ホストは完全にサポートされています。
新しい最小ホスティング モデルで Startup
を使用するには、「新しい最小ホスティング モデルでスタートアップを使用する」を参照してください。
ASP.NET Core 6.0 テンプレートで使用される次のパターンを使用して新しい最小ホスティング モデルに移行するには、「ASP.NET Core 6.0 の新しい最小ホスティング モデルに移行されたコード サンプル」と「ASP.NET Core 5.0から 6.0 に移行する」を参照してください。
Razor クラス ライブラリ (RCL) を更新する
ASP.NET Core 6.0 の一部として導入された新しい API または機能を利用するため、Razor クラス ライブラリ (RCL) を移行します。
コンポーネントを対象とする RCL を更新するには:
プロジェクト ファイルで次のプロパティを更新します。
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net6.0</TargetFramework> </PropertyGroup>
他のパッケージを最新バージョンに更新します。 最新バージョンは、NuGet.org で確認できます。
MVC を対象とする RCL を更新するには、プロジェクト ファイルで次のプロパティを更新します。
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Blazor
Blazor アプリに 5.0 の機能と 6.0 の機能をすべて導入するには、次のプロセスを実行することをお勧めします。
- Blazor プロジェクト テンプレートの 1 つから新しい 6.0 Blazor プロジェクトを作成します。 詳しくは、「ASP.NET Core Blazor 用のツール」をご覧ください。
- アプリのコンポーネントとコードを 6.0 アプリに移動して、5.0 および 6.0 の新機能を導入するように変更します。
Docker イメージの更新
Docker を使用するアプリの場合、Dockerfile の FROM
ステートメントとスクリプトを更新します。 ASP.NET Core 6.0 ランタイムを含む基本イメージを使用します。 ASP.NET Core 3.1 と 6.0 の間では、docker pull
コマンドに次の違いがあることに注意してください。
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
製品名が ".NET" に変わるのに伴い、Docker イメージは mcr.microsoft.com/dotnet/core
リポジトリから mcr.microsoft.com/dotnet
に移動されました。 詳細については、「.NET 5.0 - Docker Repo Name Change (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();
}
詳細については、「Obsoleting DatabaseErrorPage ミドルウェア (dotnet/aspnetcore #24987)」を参照してください。
ASP.NET Core モジュール (ANCM)
Visual Studio のインストール時に ASP.NET Core モジュール (ANCM) が選択されたコンポーネントではなかった場合、または ANCM の以前のバージョンがシステムにインストールされていた場合は、最新の .NET Core ホスティング バンドル インストーラー (直接ダウンロード) をダウンロードし、インストーラーを実行します。 詳細については、「ホスティング バンドル」を参照してください。
アプリケーション名の変更
.NET 6 では、WebApplicationBuilder によって、コンテンツのルート パスが DirectorySeparatorChar で終わるように正規化されます。 HostBuilder または WebHostBuilder から移行するほとんどのアプリは正規化されないため、同じアプリ名を共有することはありません。 詳しくは、「SetApplicationName」をご覧ください。
破壊的変更の確認
次のリソースを参照してください。
- Identity: UI の既定の Bootstrap のバージョンが変更された
- バージョン 3.1 から 5.0 への移行の破壊的変更。 一覧には、ASP.NET Core と Entity Framework Core も含まれます。
- バージョン 5.0 から 6.0 への移行に関する破壊的変更: ASP.NET Core および Entity Framework Core が含まれています。
- Announcements GitHub リポジトリ (aspnet/Announcements、
6.0.0
ラベル): 破壊的および非破壊的な情報が含まれています。 - Announcements GitHub リポジトリ (aspnet/Announcements、
5.0.0
ラベル): 破壊的および非破壊的な情報が含まれています。
ASP.NET Core