共用方式為


從 .NET 8 中的 ASP.NET Core 移轉至 .NET 9 中的 ASP.NET Core

本文說明如何將 .NET 8 中的 ASP.NET Core 更新為 .NET 9 中的 ASP.NET Core。

必要條件

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

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

{
  "sdk": {
-    "version": "8.0.100"
+    "version": "9.0.100"
  }
}

更新目標 Framework

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

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

  <PropertyGroup>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFramework>net9.0</TargetFramework>
  </PropertyGroup>

</Project>

更新套件參考

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

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

UseStaticFiles 取代為 MapStaticAssets

將 取代UseStaticFilesMapStaticAssets為應用程式檔案,將 Web 應用程式中的Program靜態檔案處理優化:

- app.UseStaticFiles();
+ app.MapStaticAssets();

在 MVC 和 Razor Pages 應用程式中,您還需要將呼叫鏈結至 .WithStaticAssets 之後 MapRazorPagesMapControllerRoute 中的 Program.cs。 如需範例,請參閱 ASP.NET Core 中的靜態檔案。

ASP.NET Core 會在建置和發佈時自動指紋並預先壓縮靜態檔案,然後使用 MapStaticAssets 端點路由搭配適當的快取標頭,將優化檔案呈現為端點。

若要從您的應用程式解析指紋檔案名稱:

  • 在 Blazor 應用程式中,使用 ComponentBase.Assets 屬性。 更新元件檔案中靜態資產的Razor.razor明確參考,以使用 @Assets["{ASSET PATH}"],其中{ASSET PATH}佔位元是資產的路徑。 請注意,這不應該針對Blazor架構腳本 (blazor.*.js) 完成。 在下列範例中,Bootstrap、 Blazor 專案範本應用程式樣式表單 (app.css), 和 CSS 隔離樣式表單 (根據應用程式的 命名空間 BlazorSample) 連結在根元件中,通常是 App 元件 (Components/App.razor):

    <link rel="stylesheet" href="@Assets["bootstrap/bootstrap.min.css"]" />
    <link rel="stylesheet" href="@Assets["app.css"]" />
    <link rel="stylesheet" href="@Assets["BlazorSample.styles.css"]" />
    
  • 在MVC和 Razor Pages應用程式中,腳本和連結標籤協助程式會自動解析指紋檔名。

若要在匯入 JavaScript 模組時解析指紋檔名,請新增產生的匯 入對應

  • 在 Blazor 應用程式中,將 (ImportMap) 元件新增至 <head> 應用程式根元件的內容,通常是在 App 元件中 (App.razor):

    <ImportMap />
    
  • 在MVC和 Razor pages應用程式中,將新增 <script type="importmap"></script> 至主要版面配置檔案的標頭,由匯入對應標籤協助程式更新。

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

Blazor

採用的簡化驗證狀態串行化Blazor Web App

Blazor Web Apps 可以選擇性地採用 簡化的驗證狀態串行化

在伺服器項目中:

  • 拿掉保存驗證狀態提供者 (PersistingAuthenticationStateProvider.cs)。

  • Program 檔案中移除服務註冊。 相反地,在 上鏈結 對 的AddAuthenticationStateSerializationAddRazorComponents呼叫:

    - builder.Services.AddScoped<AuthenticationStateProvider, PersistingAuthenticationStateProvider>();
    
      builder.Services.AddRazorComponents()
          .AddInteractiveServerComponents()
          .AddInteractiveWebAssemblyComponents()
    +     .AddAuthenticationStateSerialization();
    

這些 API 只會序列化伺服器端名稱和角色宣告,以在瀏覽器中存取。 若要包含所有宣告,請將 設定 SerializeAllClaimstrue

.AddAuthenticationStateSerialization(options => options.SerializeAllClaims = true);

在用戶端專案中 (.Client):

  • 拿掉持續性驗證狀態提供者 (PersistentAuthenticationStateProvider.cs)。

  • Program 檔案中移除服務註冊。 相反地,請在服務集合上呼叫 AddAuthenticationStateDeserialization

    - builder.Services.AddSingleton<AuthenticationStateProvider, PersistentAuthenticationStateProvider>();
    + builder.Services.AddAuthenticationStateDeserialization();
    

如需詳細資訊,請參閱 ASP.NET Core 9.0 的新功能

其他資源