本文說明如何將 .NET 8 中的 ASP.NET Core 更新為 .NET 9 中的 ASP.NET Core。
先決條件
具有 ASP.NET 和 Web 開發工作負載的 Visual Studio 2022。
更新 global.json 中的 .NET SDK 版本
如果您依賴 global.json 檔案以定向特定的 .NET SDK 版本,請將 version 屬性更新為已安裝的 .NET 9 SDK 版本。 例如:
{
"sdk": {
- "version": "8.0.100"
+ "version": "9.0.100"
}
}
更新目標 Framework
將專案檔案中的 目標框架識別符(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 之後 MapRazorPages 或 MapControllerRoute 中的 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 模組時解析具指紋的檔案名稱,請新增生成的 import map:
在 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 只會序列化伺服器端名稱和角色宣告,以在瀏覽器中存取。 若要包含所有宣告,請將 設定 SerializeAllClaims 為 true:
.AddAuthenticationStateSerialization(options => options.SerializeAllClaims = true);
在用戶端專案中 (.Client):
拿掉持續性驗證狀態提供者 (
PersistentAuthenticationStateProvider.cs)。從
Program檔案中移除服務註冊。 相反地,請在服務集合上呼叫 AddAuthenticationStateDeserialization :- builder.Services.AddSingleton<AuthenticationStateProvider, PersistentAuthenticationStateProvider>(); + builder.Services.AddAuthenticationStateDeserialization();
如需詳細資訊,請參閱 .NET 9 中 ASP.NET Core 的新功能。
串流轉譯屬性不再需要 true 參數
在 .NET 8 中,串流渲染 需要您為 true 參數傳遞 enabled:
@attribute [StreamRendering(true)]
在 .NET 9 或更新版本中, true 可以選擇移除,因為 true 現在是 enabled 參數的預設值:
@attribute [StreamRendering]
重大突破性變更
使用 .NET 中的重大變更中的 文章,尋找將應用程式升級至較新版本的 .NET 時可能套用的重大變更。