從 ASP.NET Core 3.1 移轉至 5.0
本文說明如何將現有的 ASP.NET Core 3.1 專案更新為 ASP.NET Core 5.0。 如需如何從 ASP.NET Core 3.1 移轉至 ASP.NET Core 6.0 的指示,請參閱從 ASP.NET Core 3.1 移轉至 6.0。
必要條件
- Visual Studio 2019 16.8 或更新版本,其中包含 ASP.NET 和網頁程式開發工作負載
- .NET 5.0 SDK
更新 global.json 中的 .NET Core SDK 版本
如果您依賴 global.json 檔案來以特定 .NET Core SDK 版本為目標,請將 version
屬性更新為已安裝的 .NET 5.0 SDK 版本。 例如:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
更新目標 Framework
如果更新 Blazor WebAssembly 專案,請跳至更新 Blazor WebAssembly 專案區段。 對於任何其他 ASP.NET Core 專案類型,請將專案檔的目標 Framework Moniker (TFM) 更新為 net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
刪除 bin
和 obj
資料夾
您可能需要刪除 bin
和 obj
資料夾。 執行 dotnet nuget locals --clear all
以清除 NuGet 套件快取。
變更 5.0.1 及更新版本 5.x (最高到 6.0) 中的 Blazor 應用程式路由邏輯
ASP.NET Core 5.0.1 修補檔版本中已變更路由優先順序的計算。 如果您已定義全部擷取 (catch-all) 路由或具有選擇性參數的路由,則這可能會影響您。
舊的行為
在 ASP.NET Core 5.0.0 或更早版本的先前行為中,優先順序較低的路由 (例如 {*slug}
) 會比優先順序較高的路由 (例如 /customer/{id}
) 先進行比對。
新的行為
ASP.NET Core 5.0.1 或更新版本中的新行為更符合 ASP.NET Core 應用程式中定義的路由行為,其中架構會先計算並建立每個區段的路由優先順序,並且只會使用中斷繫結的路由長度來作為次要準則。
變更原因
原始行為在實作中被視為錯誤 (bug),因為我們的目標是讓 Blazor 路由系統的行為如同 ASP.NET Core 路由系統,使 Blazor 路由可支援功能子集。
建議的動作
將 PreferExactMatches
屬性新增至 App.razor
檔案中的 Router
元件,以選擇加入正確的行為:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
將 PreferExactMatches
設為 @true
時,路由比對會優先使用完全相符而非萬用字元。
重要
所有應用程式都應該明確地將 PreferExactMatches
設定為 @true
。
將 PreferExactMatches
設定為 @false
或保持未設定的功能僅可針對回溯相容性提供。
發行 .NET 6 時,路由器一律會以完全相符為優先,而且無法使用 PreferExactMatches
選項。
更新 Blazor WebAssembly 和 Blazor Server 專案
本節中的指引可用於這兩個 Blazor 裝載模型。 本節之後的各節則會提供專用於裝載模型和應用程式類型的其他指引。 請為您的應用程式套用所有相關區段的指引。
在 Blazor WebAssembly 應用程式的
wwwroot/index.html
或 Blazor Server 應用程式的Pages/_Host.cshtml
中,將<link>
元素新增至樣式的<head>
元素。 在下列<link>
元素的href
屬性值中,預留位置{ASSEMBLY NAME}
是應用程式的組件名稱。+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
獨立的 Blazor WebAssembly 或 Blazor Server 範例:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
託管 Blazor WebAssembly 解決方案範例的
Client
專案:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
在應用程式的
_Imports.razor
檔案中包含新的命名空間,以用於元件虛擬化 (Microsoft.AspNetCore.Components.Web.Virtualization)。 下列_Imports.razor
檔案會顯示 Blazor 專案範本所產生應用程式中的預設命名空間。 預留位置{ASSEMBLY NAME}
是應用程式的組件名稱。Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
在
MainLayout
元件 (Shared/MainLayout.razor
) 中,將元件的 HTML 標記放在已將class
屬性設定為page
的<div>
元素之間:<div class="page"> ... </div>
將下列檔案新增至
Shared
資料夾:MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
Blazor WebAssembly 應用程式的最新基底
wwwroot/css/app.css
檔案或 Blazor Server 應用程式的wwwroot/css/site.css
檔案會包含下列樣式。 移除額外樣式,並保留下列樣式及您已新增至應用程式的任何樣式。下列樣式表只包含基底樣式,不包含開發人員新增的自訂樣式:
html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
注意
上述範例不會顯示 Open Iconic 圖示 (
open-iconic-bootstrap.css
) (由 Blazor 專案範本提供) 的@import
指示詞。 Open Iconic 已被其維護者放棄。
更新 Blazor WebAssembly 專案
請遵循上述更新 Blazor WebAssembly 和 Blazor Server 專案一節中的指引。
針對 Blazor WebAssembly 專案 (包括託管 Blazor 解決方案的 Client
專案),將下列變更套用至專案檔:
將 SDK 從
Microsoft.NET.Sdk.Web
更新為Microsoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
注意
此更新僅適用於獨立的 Blazor WebAssembly 專案和託管 Blazor 解決方案的
Client
專案。更新下列屬性:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
移除 Microsoft.AspNetCore.Components.WebAssembly.Build 的套件參考:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
將其他套件更新為其最新版本。 您可以在 NuGet.org 中找到最新版本。
在
wwwroot/index.html
中,將載入App
元件的元素變更為已將id
設定為app
的<div>
元素:-<app>Loading...</app> +<div id="app">Loading...</div>
在
Program.Main
(Program.cs
) 中,藉由加上井字號#
,將<app>
元素的參考變更為 CSS 選取器:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
在
Program.Main
(Program.cs
) 中,將預設的暫時性HttpClient
註冊變更為限定範圍 (如果有的話):-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
在託管 Blazor 解決方案的
Client
應用程式的Program.Main
(Program.cs
) 中:- 選擇性地取代用戶端基底位址 (Base Address) 字串的
builder.HostEnvironment.BaseAddress
。 - 將任何具名的暫時性用戶端處理站註冊變更為限定範圍。
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
在上述程式碼中,
{APP NAMESPACE}
預留位置是應用程式的命名空間。- 選擇性地取代用戶端基底位址 (Base Address) 字串的
使用 Microsoft 帳戶的獨立 Blazor WebAssembly 應用程式
請遵循上述更新 Blazor WebAssembly 和 Blazor Server 專案和更新 Blazor WebAssembly 專案章節中的指引。
對於在 Azure 入口網站中註冊以針對 Microsoft 帳戶使用 Microsoft Entra ID (ME-ID) 的獨立 Blazor WebAssembly 應用程式:
應用程式需要
openid
和offline_access
範圍:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
在 Azure 入口網站應用程式註冊的 [驗證] 刀鋒視窗中:
- 移除 Web 平台設定。
- 使用應用程式的重新導向 URI 新增單頁應用程式平台設定。
- 停用存取權杖和識別碼權杖的隱含授與。
如需詳細資訊,請參閱使用 Microsoft 帳戶保護 ASP.NET Core Blazor WebAssembly 獨立應用程式。
使用 Microsoft Entra ID (ME-ID) 的獨立 Blazor WebAssembly 應用程式
請遵循上述更新 Blazor WebAssembly 和 Blazor Server 專案和更新 Blazor WebAssembly 專案章節中的指引。
對於在 Azure 入口網站中註冊以使用 Microsoft Entra ID (ME-ID) 的獨立 Blazor WebAssembly 應用程式:
應用程式需要
https://graph.microsoft.com/User.Read
範圍:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
在 Azure 入口網站應用程式註冊的 [驗證] 刀鋒視窗中:
- 移除 Web 平台設定。
- 使用應用程式的重新導向 URI 新增單頁應用程式平台設定。
- 停用存取權杖和識別碼權杖的隱含授與。
如需詳細資訊,請參閱使用 Microsoft Entra ID 保護 ASP.NET Core Blazor WebAssembly 獨立應用程式。
使用 Azure Active Directory (AAD) B2C 的獨立Blazor WebAssembly 應用程式
請遵循上述更新 Blazor WebAssembly 和 Blazor Server 專案和更新 Blazor WebAssembly 專案章節中的指引。
針對在 Azure 入口網站中註冊以使用 Azure Active Directory (AAD) B2C 的獨立 Blazor WebAssembly 應用程式:
應用程式需要
openid
和offline_access
範圍:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
在 Azure 入口網站應用程式註冊的 [驗證] 刀鋒視窗中:
- 移除 Web 平台設定。
- 使用應用程式的重新導向 URI 新增單頁應用程式平台設定。
- 停用存取權杖和識別碼權杖的隱含授與。
如需詳細資訊,請參閱使用 Azure Active Directory B2C 保護 ASP.NET Core Blazor WebAssembly 獨立應用程式。
裝載的 Blazor WebAssembly 應用程式搭配 Microsoft Entra ID (ME-ID) 或 AAD B2C
請遵循上述更新 Blazor WebAssembly 和 Blazor Server 專案和更新 Blazor WebAssembly 專案章節中的指引。
使用 AAD 或 AAD B2C 進行使用者驗證的託管 Blazor 解決方案的Client
應用程式註冊應該使用單頁應用程式 Azure Apps 平台設定。
在 Azure 入口網站中 Client
應用程式註冊的 [驗證] 刀鋒視窗中:
- 移除 Web 平台設定。
- 使用應用程式的重新導向 URI 新增單頁應用程式平台設定。
- 停用存取權杖和識別碼權杖的隱含授與。
如需詳細資訊,請參閱
- 使用 Microsoft Entra ID 保護裝載的 ASP.NET Core Blazor WebAssembly 應用程式
- 使用 Azure Active Directory B2C 保護裝載的 ASP.NET Core Blazor WebAssembly 應用程式
更新託管 Blazor 解決方案的伺服器專案
請遵循上述各節中的指引:
- 更新 Blazor WebAssembly 和 Blazor Server 專案
- 更新 Blazor WebAssembly 專案
- 以下章節適用於使用 Azure Active Directory 的應用程式提供者:
依照本文中的一般指引,將託管 Blazor 解決方案的 Server
專案更新為 ASP.NET Core 應用程式。
此外,使用 Microsoft Entra ID (ME-ID) 或 B2C 向用戶端 Blazor WebAssembly 應用程式驗證使用者的Server
專案應該採用新的 Microsoft Identity v2.0 套件:
針對 AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
針對 AAD B2C:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
針對上述套件參考,判斷 NuGet.org 上 {VERSION}
預留位置的套件版本:
注意
託管 Blazor WebAssembly 解決方案中 Server
專案的 SDK 會維持 Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
如需詳細資訊,請參閱
- 使用 Microsoft Entra ID 保護裝載的 ASP.NET Core Blazor WebAssembly 應用程式
- 使用 Azure Active Directory B2C 保護裝載的 ASP.NET Core Blazor WebAssembly 應用程式
清除並重建解決方案
將應用程式或解決方案移轉至 .NET 5 之後,請清除並重建應用程式或解決方案。 如果新的套件參考與快取套件之間存在套件不相容的情況:
在命令殼層中執行下列
dotnet nuget locals
命令,以清除 NuGet 套件快取:dotnet nuget locals --clear all
清除並重建應用程式或解決方案。
疑難排解
請遵循您應用程式適用的 Blazor WebAssembly 安全性主題最後的疑難排解指引:
獨立 Blazor WebAssembly 應用程式:
- OIDC 提供者和 WebAssembly 驗證程式庫的一般指引
- Microsoft 帳戶
- Microsoft Entra ID (ME-ID)
- Azure Active Directory (AAD) B2C
裝載的 Blazor WebAssembly 應用程式:
Microsoft Entra ID (ME-ID) 的未經授權用戶端
升級使用 AAD 進行驗證的 Blazor WebAssembly 應用程式之後,在使用者以 AAD 登入之後,您可能會在應用程式的登入回呼上收到下列錯誤:
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed. 不符合以下需求: DenyAnonymousAuthorizationRequirement:需要已驗證的使用者。
AAD 的登入回呼錯誤:
- 錯誤:
unauthorized_client
- 描述:
AADB2C90058: The provided application is not configured to allow public clients.
若要解決此錯誤:
- 在 Azure 入口網站中,存取應用程式的資訊清單。
- 將
allowPublicClient
屬性設定為null
或true
。
更新 Blazor 漸進式 Web 應用程式 (PWA)
將下列項目新增至 PWA 應用程式的專案檔:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
移除預覽版 CSS 隔離樣式表連結
如果專案的 wwwroot/index.html
(Blazor WebAssembly) 或 Pages/_Host.cshtml
(Blazor Server) 包含舊版 5.0 預覽版本中 scoped.styles.css
的樣式表 <link>
元素,請移除 <link>
標記:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
更新 Razor 類別庫 (RCL)
移轉 Razor 類別庫 (RCL) 以利用在 ASP.NET Core 5.0 中引進的新 API 或功能。
若要更新以元件為目標的 RCL:
更新專案檔中的下列屬性:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
將其他套件更新為其最新版本。 您可以在 NuGet.org 中找到最新版本。
若要更新以 MVC 為目標的 RCL,請在專案檔中更新下列屬性:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
更新套件參考
在專案檔中,將每個 Microsoft.AspNetCore.*、 Microsoft.EntityFrameworkCore.*、 Microsoft.Extensions.* 和 System.Net.Http.Json 套件參考的 Version
屬性更新為 5.0.0 或更新版本。 例如:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6">
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
- <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
更新 Docker 映像
針對使用 Docker 的應用程式,請更新 DockerfileFROM
陳述式和指令碼。 使用包含 ASP.NET Core 5.0 執行階段的基底映像。 請考慮 ASP.NET Core 3.1 和 5.0 之間的下列 docker pull
命令差異:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
在移至 ".NET" 以作為產品名稱的一部分中,Docker 映像會從 mcr.microsoft.com/dotnet/core
存放庫移至 mcr.microsoft.com/dotnet
。 如需詳細資訊,請參閱 dotnet/dotnet-docker#1939。
ASP.NET Core MVC 和 Razor Pages 中的模型繫結變更
DateTime 值是以 UTC 時間繫結的模型
在 ASP.NET Core 3.1 和更早版本中,DateTime
值是以模型繫結為本地時間,其中時區是由伺服器決定。 繫結自輸入格式設定 (JSON) 的 DateTime
數值和 DateTimeOffset
數值已繫結為 UTC 時區。
在 ASP.NET Core 5.0 和更新版本中,模型繫結會一致地繫結 DateTime
值與 UTC 時區。
若要保留先前的行為,請移除 Startup.ConfigureServices
中的 DateTimeModelBinderProvider
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
若要新增模型繫結 C# 9 記錄類型的支援,ComplexTypeModelBinderProvider 為:
- 標註為已淘汰。
- 預設為不會再註冊。
依賴集合中 ModelBinderProviders
存在 ComplexTypeModelBinderProvider
的應用程式需要參考新的繫結器提供者:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage 已淘汰
包含個別使用者帳戶選項的 ASP.NET Core 3.1 範本會產生對 UseDatabaseErrorPage 發出的呼叫。 UseDatabaseErrorPage
現在已淘汰,應該以 AddDatabaseDeveloperPageExceptionFilter
和 UseMigrationsEndPoint
的組合加以取代,如下列程式碼所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
+ services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
+ app.UseMigrationsEndPoint();
- app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
如需詳細資訊,請參閱這個 GitHub 問題。
ASP.NET Core 模組 (ANCM)
如果在安裝 Visual Studio 時,ASP.NET Core 模組 (ANCM) 不是選取的元件,或者如果系統上已安裝舊版的 ANCM,請下載最新的 .NET Core 裝載套件組合安裝程式 (直接下載),並執行安裝程式。 如需詳細資訊,請參閱裝載組合套件。
影響某些 NuGet 套件的套件參考變更
將某些 Microsoft.Extensions.*
NuGet 套件從 dotnet/extensions 存放庫移轉至 dotnet/runtime 後 (如將 dotnet/extensions 內容移轉至 dotnet/runtime 和 dotnet/aspnetcore (aspnet/Announcements #411) 中所述),封裝變更會套用至某些已移轉的套件。 這些變更通常會導致 .NET API 的命名空間變更。
若要在移轉至 5.0 時進一步研究應用程式命名空間變更的 API,請使用 .NET API 瀏覽器。
移轉 Microsoft.Identity.Web
下列 Wiki 頁面說明如何將 Microsoft.Identity.Web 從 ASP.NET Core 3.1 移轉至 5.0:
下列教學課程也會說明移轉:
- ASP.NET Core Web 應用程式使用到貴組織中的 Microsoft identity 平台來登入使用者。 請參閱選項 2:從命令列建立範例。
- 使用 WPF 桌面應用程式中的 Microsoft identity 平臺登入使用者,並呼叫 ASP.NET Core Web API。 請參閱如何建立程式碼。
檢閱中斷性變更
如需了解從 .NET Core 3.1 到 .NET 5.0 的中斷性變更,請參閱從 3.1 版移轉至 5.0 版的中斷性變更。 ASP.NET Core 和 Entity Framework Core 也包含在此清單中。