從 ASP.NET Core 6.0 移轉到 7.0

此文章說明如何將現有的 ASP.NET Core 6.0 專案更新為 ASP.NET Core 7.0。

必要條件

更新 global.json 中的 .NET Core SDK 版本

如果您依賴 global.json 檔案來以特定 .NET Core SDK 版本為目標,請將 version 屬性更新為已安裝的 .NET 7.0 SDK 版本。 例如:

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

更新目標 Framework

將專案檔的目標 Framework Moniker (TFM) 更新為 net7.0

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

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

</Project>

更新套件參考

在專案檔中,將每個 Microsoft.AspNetCore.*Microsoft.EntityFrameworkCore.*Microsoft.Extensions.*System.Net.Http.Json 套件參考的 Version 屬性更新為 7.0.0 或更高版本。 例如:

<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

採用 .NET 7 功能

在遵循此文章先前的指導,將應用程式更新為 7.0 之後,請遵循 ASP.NET Core 7.0 的新功能中的連結來採用特定功能。

若要採用 Blazor 應用程式的所有新 7.0 功能,建議您使用下列流程:

  • 從其中一個 Blazor 專案範本建立新的 7.0 Blazor 專案。 如需詳細資訊,請參閱 ASP.NET Core Blazor 工具。
  • 將應用程式的元件和程式碼移至 7.0 應用程式,進行修改以採用新的 7.0 功能。

移轉已解除封送的 JavaScript Interop

使用 IJSUnmarshalledRuntime 介面解除封送 Interop 的做法已淘汰,請使用 JavaScript [JSImport]/[JSExport] Interop 加以取代。

如需詳細資訊,請參閱 JavaScript JSImport/JSExport Interop 與 ASP.NET Core Blazor

Blazor WebAssembly 驗證會使用歷程記錄狀態進行重新導向

Blazor WebAssembly 應用程式中的驗證支援已變更為依賴瀏覽歷程記錄狀態,而不是 URL 中的查詢字串。 因此,在 .NET 7 中成功登入之後,透過查詢字串傳遞傳回 URL 無法重新導向回原始頁面。

下列範例示範以 .NET 6 或更早版本為目標之應用程式的先前重新導向方法,該方法依據的是具有 NavigateTo 的重新導向 URL (?returnUrl=):

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

下列範例示範以 .NET 7 或更高版本為目標之應用程式的新重新導向方法,該方法依據的是具有 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);
    }
}

在這項變更中,SignOutSessionStateManager 在 .NET 7 或更高版本中已淘汰,並由 NavigateToLogout 取代。

下列範例示範從 Blazor WebAssembly 專案範本產生之應用程式中 Shared/LoginDisplay.razor先前方法

@inject SignOutSessionStateManager SignOutManager

...

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

下列範例示範呼叫 NavigateToLogout新方法SignOutSessionStateManager 的插入 (@inject) 會從檔案頂端的元件指示詞中移除,BeginLogOut 方法會更新為下列程式碼:

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

SignOutSessionStateManager 服務註冊會在 Program.cs 中移除:

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

如需詳細資訊,請參閱以下資源:

適用於 .NET 6 專案的 .NET WebAssembly 組建工具

您現在使用 .NET 7 SDK 時,可以搭配 .NET 6 專案使用 .NET WebAssembly 建置工具。 新的 wasm-tools-net6 工作負載包含適用於 .NET 6 專案的 .NET WebAssembly 建置工具,以便能與 .NET 7 SDK 搭配使用。 現有的 wasm-tools 工作負載會安裝適用於 .NET 7 專案的 .NET WebAssembly 建置工具。 不過,.NET WebAssembly 建置工具的 .NET 7 版本與使用 .NET 6 建置的現有專案不相容。 使用 .NET WebAssembly 建置工具且需要同時支援 .NET 6 和 .NET 7 的專案,必須使用多重目標。

更新 Docker 映像

針對使用 Docker 的應用程式,請更新 DockerfileFROM 陳述式和指令碼。 使用包含 ASP.NET Core 7.0 執行階段的基底映像。 請考慮 ASP.NET Core 6.0 和 7.0 之間的下列 docker pull 命令差異:

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

檢閱中斷性變更

如需從 .NET Core 6.0 到 .NET 7.0 的中斷性變更,請參閱 .NET 7 中的中斷性變更。 ASP.NET Core 和 Entity Framework Core 也包含在此清單中。