この記事では、.NET 6 で既存の ASP.NET Core 3.1 プロジェクトを ASP.NET Core に更新する方法について説明します。 .NET 5 の ASP.NET Core から .NET 6 にアップグレードするには、「.NET 5 の ASP.NET Core から .NET 6 への移行」を参照してください。
前提条件
- Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
- .NET 6 SDK
global.json
で .NET Core SDK バージョンを更新する
特定の .NET SDK バージョンを対象とする global.json
ファイルに依存している場合は、 version
プロパティをインストールされている .NET 6 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 から .NET 6 に移行するアプリでは、最小限のホスティング モデルを使用する必要はありません。 Startup
を使用すると、ASP.NET Core 3.1 テンプレートで使用される 汎用ホスト が完全にサポートされます。
新しい最小ホスティング モデルで Startup
を使用するには、「新しい最小ホスティング モデルでスタートアップを使用する」を参照してください。
.NET 6 テンプレートの ASP.NET Core で使用される次のパターンを使用して新しい最小ホスティング モデルに移行するには、.NET 6 の ASP.NET Core の新しい最小ホスティング モデルに移行されたコード サンプルと、.NET5 の ASP.NET Core から .NET 6 への移行に関するページを参照してください。
Razor クラス ライブラリ (RCL) を更新する
Razor クラス ライブラリ (RCL) を移行して、.NET 6 の ASP.NET Core の一部として導入された新しい API または機能を利用します。
コンポーネントを対象とする 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
アプリに 5.0 の機能と Blazorをすべて導入するには、次のプロセスを実行することをお勧めします。
- Blazor プロジェクト テンプレートの 1 つから新しい 6.0 Blazor プロジェクトを作成します。 詳しくは、「ASP.NET Core Blazor 用のツール」をご覧ください。
- アプリのコンポーネントとコードを 6.0 アプリに移動して、5.0 および 6.0 の新機能を導入するように変更します。
Docker イメージの更新
Docker を使用するアプリの場合、Dockerfile の FROM
ステートメントとスクリプトを更新します。 .NET 6 ランタイムの ASP.NET Core を含む基本イメージを使用します。 ASP.NET Core 3.1 と .NET 6 の 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 タイム ゾーンとしてバインドされました。
.NET 5 以降では、モデル バインドでは、値と UTC タイムゾーンが一貫してバインドされます。
以前の動作を維持するには、DateTimeModelBinderProvider
の Startup.ConfigureServices
を削除します。
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider
\
ComplexObjectModelBinder
置き換え ComplexTypeModelBinderProvider
\ ComplexTypeModelBinder
C# 9 レコード型のモデル バインドのサポートを追加するため、ComplexTypeModelBinderProvider は次のようになります。
- 古い形式として注釈付けされます。
- 既定では登録されなくなります。
ComplexTypeModelBinderProvider
コレクションに ModelBinderProviders
が存在することに依存するアプリでは、新しいバインダー プロバイダーを参照する必要があります。
- 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 も含まれます。
- .NET 5 から .NET 6 への移行に関する破壊的変更: ASP.NET Core と Entity Framework Core が含まれます。
-
Announcements GitHub リポジトリ (aspnet/Announcements、
6.0.0
ラベル): 破壊的および非破壊的な情報が含まれています。 -
Announcements GitHub リポジトリ (aspnet/Announcements、
5.0.0
ラベル): 破壊的および非破壊的な情報が含まれています。
ASP.NET Core