從 ASP.NET Core 6.0 移轉到 7.0
此文章說明如何將現有的 ASP.NET Core 6.0 專案更新為 ASP.NET Core 7.0。
必要條件
Visual Studio 2022 和 ASP.NET 與 Web 開發工作負載。
更新 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 功能。
簡化元件參數係結
在先前 Blazor 版本中,跨多個元件系結需要系結至具有 get
/set
存取子的屬性。
在 .NET 6 和更早版本中:
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />
@code {
...
private string BoundValue
{
get => ChildMessage ?? string.Empty;
set => ChildMessageChanged.InvokeAsync(value);
}
}
在 .NET 7 中,您可以使用新的 @bind:get
和 @bind:set
修飾詞來支援雙向數據系結,並簡化系結語法:
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage"
@bind-GrandchildMessage:set="ChildMessageChanged" />
如需詳細資訊,請參閱數據系結文章中的下列內容:
移轉已解除封送的 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 或更早版本RedirectToLogin.razor
為目標之應用程式的先前重新導向方法,其以 重新導向 URL (?returnUrl=
) NavigateTo為基礎:
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
下列範例示範中RedirectToLogin.razor
以 .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");
}
}
下列範例示範 中Shared/LoginDisplay.razor
NavigateToLogout呼叫 的新方法。 SignOutSessionStateManager 的插入 (@inject
) 會從檔案頂端的元件指示詞中移除,BeginLogOut
方法會更新為下列程式碼:
@code{
public void BeginLogOut()
{
Navigation.NavigateToLogout("authentication/logout");
}
}
SignOutSessionStateManager 服務註冊會在 Program.cs
中移除:
- builder.Services.AddScoped<SignOutSessionStateManager>();
如需詳細資訊,請參閱以下資源:
- [中斷性變更]:更新 Webassembly 應用程式中的驗證
- ASP.NET Core Blazor 路由和導覽
- 保護 ASP.NET Core Blazor WebAssembly
- ASP.NET Core Blazor 驗證與授權
適用於 .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 也包含在此清單中。