Bagikan melalui


Bermigrasi dari ASP.NET Core 6.0 to 7.0

Artikel ini menjelaskan cara memperbarui proyek ASP.NET Core 6.0 yang ada ke ASP.NET Core 7.0.

Prasyarat

Memperbarui versi .NET Core SDK di global.json

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

{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

Memperbarui kerangka kerja target

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

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

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

</Project>

Memperbarui referensi paket

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

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.9" />
-    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="7.0.0" />
</ItemGroup>

Blazor

Mengadopsi fitur .NET 7

Setelah mengikuti panduan sebelumnya dalam artikel ini untuk memperbarui aplikasi ke 7.0, adopsi fitur tertentu dengan mengikuti tautan di Apa yang baru di ASP.NET Core 7.0.

Untuk mengadopsi semua fitur 7.0 baru untuk Blazor aplikasi, kami merekomendasikan proses berikut:

  • Buat proyek 7.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 7.0 yang membuat modifikasi untuk mengadopsi fitur 7.0 baru.

Menyederhanakan pengikatan parameter komponen

Dalam rilis sebelumnya Blazor , pengikatan di beberapa komponen memerlukan pengikatan ke properti dengan get/set aksesor.

Di .NET 6 dan yang lebih lama:

<NestedGrandchild @bind-GrandchildMessage="BoundValue" />

@code {
    ...

    private string BoundValue
    {
        get => ChildMessage ?? string.Empty;
        set => ChildMessageChanged.InvokeAsync(value);
    }
}

Di .NET 7, Anda dapat menggunakan pengubah dan @bind:set baru @bind:get untuk mendukung pengikatan data dua arah dan menyederhanakan sintaks pengikatan:

<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage" 
    @bind-GrandchildMessage:set="ChildMessageChanged" />

Untuk informasi selengkapnya, lihat konten berikut ini di artikel Pengikatan data:

Memigrasikan interop JavaScript yang tidak terenkripsi

Interop yang tidak terencana menggunakan IJSUnmarshalledRuntime antarmuka usang dan harus diganti dengan interop JavaScript/[JSImport][JSExport].

Untuk informasi selengkapnya, lihat Interop JavaScript JSImport/JSExport dengan ASP.NET Core Blazor.

Blazor WebAssembly autentikasi menggunakan status riwayat untuk pengalihan

Dukungan untuk autentikasi di Blazor WebAssembly aplikasi berubah untuk mengandalkan status riwayat navigasi alih-alih string kueri di URL. Akibatnya, meneruskan URL pengembalian melalui string kueri gagal dialihkan kembali ke halaman asli setelah berhasil masuk di .NET 7.

Contoh berikut menunjukkan pendekatan pengalihan sebelumnya untuk aplikasi yang menargetkan .NET 6 atau yang lebih lama di RedirectToLogin.razor, yang didasarkan pada URL pengalihan (?returnUrl=) dengan NavigateTo:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

Contoh berikut menunjukkan pendekatan pengalihan baru untuk aplikasi yang menargetkan .NET 7 atau yang lebih baru di RedirectToLogin.razor, yang didasarkan pada status riwayat navigasi dengan NavigateToLogin:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options

@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
    }
}

Sebagai bagian dari perubahan ini, SignOutSessionStateManager usang di .NET 7 atau yang lebih baru dan diganti dengan NavigateToLogout.

Contoh berikut menunjukkan pendekatan sebelumnya dalam Shared/LoginDisplay.razor aplikasi yang dihasilkan dari Blazor WebAssembly templat proyek:

@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Contoh berikut menunjukkan pendekatan baru dalam Shared/LoginDisplay.razor panggilan NavigateToLogouttersebut . Injeksi (@inject) dihapus SignOutSessionStateManager dari arahan komponen di bagian atas file, dan BeginLogOut metode diperbarui ke kode berikut:

@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

Pendaftaran SignOutSessionStateManager layanan dihapus dalam Program.cs:

- builder.Services.AddScoped<SignOutSessionStateManager>();

Untuk informasi selengkapnya, lihat sumber daya berikut:

Alat build .NET WebAssembly untuk proyek .NET 6

Anda sekarang dapat menggunakan alat build .NET WebAssembly dengan proyek .NET 6 saat bekerja dengan .NET 7 SDK. Beban kerja baru wasm-tools-net6 mencakup alat build .NET WebAssembly untuk proyek .NET 6 sehingga dapat digunakan dengan .NET 7 SDK. Beban kerja yang wasm-tools ada menginstal alat build .NET WebAssembly untuk proyek .NET 7. Namun, versi .NET 7 dari alat build .NET WebAssembly tidak kompatibel dengan proyek yang ada yang dibangun dengan .NET 6. Proyek yang menggunakan alat build .NET WebAssembly yang perlu mendukung .NET 6 dan .NET 7 harus menggunakan multi-penargetan.

Memperbarui gambar Docker

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

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

Tinjau perubahan yang melanggar

Untuk memecahkan perubahan dari .NET Core 6.0 ke .NET 7.0, lihat Melanggar perubahan di .NET 7. ASP.NET Core dan Entity Framework Core disertakan dalam daftar.