從 .NET 8 中的 ASP.NET Core 移轉至 .NET 9 中的 ASP.NET Core
本文說明如何將 .NET 8 中的 ASP.NET Core 更新為 .NET 9 中的 ASP.NET Core。
必要條件
Visual Studio 2022 預覽版以及 ASP.NET 與 Web 開發工作負載。
更新 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
之後 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 模組時解析指紋檔名,請新增產生的匯 入對應:
在 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();
如需詳細資訊,請參閱 ASP.NET Core 9.0 的新功能。