Bagikan melalui


Migrasi dari ASP.NET Core 3.1 ke 6.0

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

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.0 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 Version paket , Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, dan System.Net.Http.Json 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 6.0 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 templat ASP.NET Core 6.0, lihat Sampel kode yang dimigrasikan ke model hosting minimal baru di ASP.NET Core 6.0 dan Migrasi dari ASP.NET Core 5.0 ke 6.0

Memperbarui Razor pustaka kelas (RCL)

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

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 FROM Anda. Gunakan gambar dasar yang menyertakan runtime ASP.NET Core 6.0. Pertimbangkan perbedaan perintah berikut docker pull antara ASP.NET Core 3.1 dan 6.0:

- 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 dan yang lebih lama, DateTime nilai terikat model sebagai waktu lokal, di mana zona waktu ditentukan oleh server. DateTime nilai terikat dari pemformatan input (JSON) dan DateTimeOffset nilai terikat sebagai zona waktu UTC.

Di ASP.NET Core 5.0 dan 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: