Bagikan melalui


Migrasi dari ASP.NET Core 3.1 ke .NET 6

Artikel ini menjelaskan cara memperbarui proyek ASP.NET Core 3.1 yang ada ke ASP.NET Core di .NET 6. Untuk meningkatkan dari ASP.NET Core di .NET 5 ke .NET 6, lihat Migrasi dari ASP.NET Core di .NET 5 ke .NET 6.

Prasyarat

Memperbarui versi .NET SDK di global.json

Jika Anda mengandalkan global.json file untuk menargetkan versi .NET SDK tertentu, perbarui version properti ke versi .NET 6 SDK yang diinstal. Contohnya:

{
  "sdk": {
-    "version": "3.1.200"
+    "version": "6.0.100"
  }
}

Memperbarui kerangka kerja target

Perbarui Moniker Kerangka Kerja Target (TFM) file proyek menjadi net6.0:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

Memperbarui referensi paket

Dalam file proyek, perbarui setiap Microsoft.AspNetCore.*atribut referensi Microsoft.EntityFrameworkCore.* paket , Microsoft.Extensions.*, System.Net.Http.Json, dan Version ke 6.0.0 atau yang lebih baru. Contohnya:

<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>

Hapus bin dan obj folder

Anda mungkin perlu menghapus bin folder dan obj . Jalankan dotnet nuget locals --clear all untuk menghapus cache paket NuGet.

Model hosting minimal

Templat ASP.NET Core menghasilkan kode menggunakan model hosting minimal baru. Model hosting minimal menyaingkan Startup.cs dan Program.cs menjadi satu Program.cs file. ConfigureServices dan Configure tidak lagi digunakan. Aplikasi yang bermigrasi dari ASP.NET Core 3.1 ke .NET 6 tidak perlu menggunakan model hosting minimal, menggunakan Startup dan Host Generik yang digunakan oleh templat ASP.NET Core 3.1 didukung sepenuhnya.

Untuk menggunakan Startup dengan model hosting minimal baru, lihat Menggunakan Startup dengan model hosting minimal baru.

Untuk bermigrasi ke model hosting minimal baru menggunakan pola berikut yang digunakan oleh ASP.NET Core dalam templat .NET 6, lihat Sampel kode yang dimigrasikan ke model hosting minimal baru di ASP.NET Core di .NET 6 dan Migrasi dari ASP.NET Core di .NET 5 ke .NET 6

Memperbarui Razor pustaka kelas (RCL)

Migrasikan Razor pustaka kelas (RCL) untuk memanfaatkan API atau fitur baru yang diperkenalkan sebagai bagian dari ASP.NET Core di .NET 6.

Untuk memperbarui RCL yang menargetkan komponen:

  1. Perbarui properti berikut dalam file proyek:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Perbarui paket lain ke versi terbarunya. Versi terbaru dapat ditemukan di NuGet.org.

Untuk memperbarui MVC penargetan RCL, perbarui properti berikut dalam file proyek:

<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

Blazor

Untuk mengadopsi semua fitur 5.0 dan fitur 6.0 untuk Blazor aplikasi, kami merekomendasikan proses berikut:

  • Buat proyek 6.0 Blazor baru dari salah Blazor satu templat proyek. Untuk informasi selengkapnya, lihat Alat untuk ASP.NET Core Blazor.
  • Pindahkan komponen dan kode aplikasi ke aplikasi 6.0 yang membuat modifikasi untuk mengadopsi fitur 5.0 dan 6.0 baru.

Memperbarui gambar Docker

Untuk aplikasi yang menggunakan Docker, perbarui pernyataan dan skrip Dockerfile. Gunakan gambar dasar yang menyertakan ASP.NET Core dalam runtime .NET 6. Pertimbangkan perbedaan perintah berikut docker pull antara ASP.NET Core 3.1 dan .NET 6:

- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0

Sebagai bagian dari perpindahan ke ".NET" sebagai nama produk, gambar Docker dipindahkan dari mcr.microsoft.com/dotnet/core repositori ke mcr.microsoft.com/dotnet. Untuk informasi selengkapnya, lihat .NET 5.0 - Perubahan Nama Repo Docker (dotnet/dotnet-docker #1939).

Perubahan pengikatan model di ASP.NET Core MVC dan Razor Pages

DateTime nilai terikat model sebagai waktu UTC

Dalam ASP.NET Core 3.1 atau yang lebih lama, DateTime nilai terikat pada model sebagai waktu setempat, di mana zona waktu ditentukan oleh server. DateTime nilai terikat dari pemformatan input (JSON) dan DateTimeOffset nilai terikat sebagai zona waktu UTC.

Di .NET 5 atau yang lebih baru, pengikatan model secara konsisten mengikat DateTime nilai dengan zona waktu UTC.

Untuk mempertahankan perilaku sebelumnya, hapus DateTimeModelBinderProvider di Startup.ConfigureServices:

services.AddControllersWithViews(options =>
    options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder mengganti ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Untuk menambahkan dukungan untuk pengikatan model jenis catatan C# 9, adalah ComplexTypeModelBinderProvider :

  • Diannotasi sebagai usang.
  • Tidak lagi terdaftar secara default.

Aplikasi yang mengandalkan keberadaan ComplexTypeModelBinderProvider dalam ModelBinderProviders koleksi perlu mereferensikan penyedia pengikat baru:

- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();

UseDatabaseErrorPage usang

Templat ASP.NET Core 3.1 yang menyertakan opsi untuk akun pengguna individual menghasilkan panggilan ke UseDatabaseErrorPage. UseDatabaseErrorPage sekarang usang dan harus diganti dengan kombinasi AddDatabaseDeveloperPageExceptionFilter dan UseMigrationsEndPoint, seperti yang ditunjukkan dalam kode berikut:

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();
    }

Untuk informasi selengkapnya, lihat Middleware DatabaseErrorPage usang (dotnet/aspnetcore #24987).

Modul Inti ASP.NET (ANCM)

Jika ASP.NET Core Module (ANCM) bukan komponen yang dipilih saat Visual Studio diinstal atau jika versi ANCM sebelumnya diinstal pada sistem, unduh Penginstal Bundel Hosting .NET Core terbaru (unduh langsung) dan jalankan alat penginstal. Untuk informasi selengkapnya, lihat Bundel Hosting.

Perubahan nama aplikasi

Di .NET 6, WebApplicationBuilder menormalkan jalur akar konten ke akhir dengan DirectorySeparatorChar. Sebagian besar aplikasi yang bermigrasi dari HostBuilder atau WebHostBuilder tidak akan memiliki nama aplikasi yang sama karena tidak dinormalisasi. Untuk informasi selengkapnya, lihat SetApplicationName

Tinjau perubahan yang melanggar

Lihat sumber daya berikut: