Migrowanie z ASP.NET Core 3.1 do wersji 5.0
W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 3.1 w celu ASP.NET Core 5.0. Aby uzyskać instrukcje dotyczące migracji z ASP.NET Core 3.1 do ASP.NET Core 6.0, zobacz Migrowanie z ASP.NET Core 3.1 do 6.0.
Wymagania wstępne
- Program Visual Studio 2019 16.8 lub nowsza wersja z pakietem roboczym tworzenia aplikacji ASP.NET. i aplikacji internetowych
- Zestaw .NET SDK 5.0
Aktualizowanie wersji zestawu .NET Core SDK w programie global.json
Jeśli plik jest zależny od global.json określonej wersji zestawu .NET Core SDK, zaktualizuj version
właściwość do zainstalowanej wersji zestawu .NET 5.0 SDK. Na przykład:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Aktualizowanie platformy docelowej
W przypadku aktualizowania Blazor WebAssembly projektu przejdź do sekcji Aktualizowanie Blazor WebAssembly projektów . W przypadku dowolnego innego typu projektu ASP.NET Core zaktualizuj plik projektu Target Framework Moniker (TFM) na net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Usuwanie bin
i obj
foldery
Może być konieczne usunięcie bin
folderów i obj
. Uruchom polecenie dotnet nuget locals --clear all
, aby wyczyścić pamięć podręczną pakietu NuGet.
Blazor Zmiany logiki routingu aplikacji w wersji 5.0.1 i kolejnych wersjach 5.x do 6.0
Obliczenie pierwszeństwa trasy zmieniło się w wersji poprawkowej ASP.NET Core 5.0.1. Może to mieć wpływ na użytkownika, jeśli zdefiniowano trasy lub trasy typu catch-all z opcjonalnymi parametrami.
Stare zachowanie
W przypadku wcześniejszego zachowania w programie ASP.NET Core 5.0.0 lub starszym trasy o niższym pierwszeństwie, takie jak , są dopasowywane przed trasami o wyższym prioryencie, takim jak {*slug}
/customer/{id}
.
Nowe zachowanie
Nowe zachowanie w programie ASP.NET Core 5.0.1 lub nowszym ściślej odpowiada zachowaniu routingu zdefiniowanemu w aplikacjach ASP.NET Core, w którym struktura oblicza i ustanawia pierwszeństwo trasy dla każdego segmentu jako pierwszy i używa tylko długości trasy do zerwania więzi jako kryteriów pomocniczych.
Przyczyna wprowadzenia zmiany
Oryginalne zachowanie jest uznawane za usterkę w implementacji, ponieważ naszym celem jest Blazor zachowanie systemu routingu w taki sam sposób, jak system routingu ASP.NET Core dla podzestawu funkcji obsługiwanych przez Blazor routing.
Zalecana akcja
PreferExactMatches
Dodaj atrybut do Router
składnika w pliku, App.razor
aby wybrać prawidłowe zachowanie:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Gdy PreferExactMatches
jest ustawiona wartość @true
, dopasowanie tras preferuje dokładne dopasowania dla symboli wieloznacznych.
Ważne
Wszystkie aplikacje powinny jawnie ustawić wartość PreferExactMatches
@true
.
Możliwość ustawienia PreferExactMatches
wartości lub @false
pozostawienia jej bez ustawienia jest dostępna tylko w celu zapewnienia zgodności z poprzednimi wersjami.
Po wydaniu platformy .NET 6 router zawsze będzie preferował dokładne dopasowania, a PreferExactMatches
opcja nie będzie dostępna.
Aktualizowanie Blazor WebAssembly i Blazor Server projekty
Wskazówki zawarte w tej sekcji dotyczą obu Blazor modeli hostingu. Sekcje opisane w tej sekcji zawierają dodatkowe wskazówki dotyczące hostowania modeli i typów aplikacji. Zastosuj wskazówki ze wszystkich odpowiednich sekcji do aplikacji.
Blazor WebAssembly W
wwwroot/index.html
aplikacji lub Blazor ServerPages/_Host.cshtml
aplikacji dodaj<link>
element do<head>
elementu style. W następujących<link>
wartościach atrybutów elementuhref
symbol zastępczy{ASSEMBLY NAME}
jest nazwą zestawu aplikacji.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Blazor WebAssembly Autonomiczny lub Blazor Server przykład:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
przykład projektu hostowanego Blazor WebAssembly rozwiązania:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Dołącz nową przestrzeń nazw do pliku aplikacji
_Imports.razor
na potrzeby wirtualizacji składników. Microsoft.AspNetCore.Components.Web.Virtualization Poniższe_Imports.razor
pliki pokazują domyślne przestrzenie nazw w aplikacjach wygenerowanych na Blazor podstawie szablonów projektów. Symbol zastępczy{ASSEMBLY NAME}
to nazwa zestawu aplikacji.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
W składniku
MainLayout
(Shared/MainLayout.razor
) umieść znacznik HTML składnika za pomocą<div>
elementu, który maclass
atrybut ustawiony na :page
<div class="page"> ... </div>
Dodaj następujące pliki do
Shared
folderu: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; } }
Najnowszy plik Blazor WebAssembly podstawowy
wwwroot/css/app.css
aplikacji lubwwwroot/css/site.css
pliku Blazor Server aplikacji zawiera następujące style. Usuń dodatkowe style, pozostawiając następujące style i wszystkie dodane do aplikacji.Poniższy arkusz stylów zawiera tylko style podstawowe i nie zawiera niestandardowych stylów dodanych przez dewelopera:
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; }
Uwaga
W poprzednim przykładzie nie jest wyświetlana
@import
dyrektywa dotycząca ikon Open Iconic (open-iconic-bootstrap.css
) udostępnionych Blazor przez szablon projektu. Open Iconic został porzucony przez jego opiekunów.
Aktualizowanie Blazor WebAssembly projektów
Postępuj zgodnie ze wskazówkami w poprzedniej sekcji Update and projects (Aktualizacja Blazor WebAssembly i Blazor Server projekty ).
Blazor WebAssembly W przypadku projektu, w tym Client
projektu hostowanego Blazor rozwiązania, zastosuj następujące zmiany w pliku projektu:
Zaktualizuj zestaw SDK z
Microsoft.NET.Sdk.Web
do :Microsoft.NET.Sdk.BlazorWebAssembly
- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Uwaga
Ta aktualizacja dotyczy tylko projektów autonomicznych Blazor WebAssembly i
Client
projektów hostowanych Blazor rozwiązań.Zaktualizuj następujące właściwości:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Usuń odwołanie do pakietu Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Zaktualizuj inne pakiety do najnowszych wersji. Najnowsze wersje można znaleźć w NuGet.org.
W
wwwroot/index.html
pliku zmień element, który ładujeApp
składnik do<div>
elementu zid
zestawem naapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
W
Program.Main
pliku (Program.cs
) zmień odwołanie do<app>
elementu na selektor CSS, dodając do niego skrót#
:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
W
Program.Main
(Program.cs
) zmień domyślną rejestrację przejściowąHttpClient
na zakres, jeśli istnieje:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
W
Program.Main
(Program.cs
) aplikacjiClient
hostowanych Blazor rozwiązań:- Opcjonalnie zastąp ciąg
builder.HostEnvironment.BaseAddress
adresami podstawowymi klienta. - Zmień wszystkie nazwane przejściowe rejestracje fabryki klienta na zakres.
-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"));
W poprzednim kodzie
{APP NAMESPACE}
symbol zastępczy jest przestrzenią nazw aplikacji.- Opcjonalnie zastąp ciąg
Aplikacja autonomiczna Blazor WebAssembly z kontami Microsoft
Postępuj zgodnie ze wskazówkami w poprzednich sekcjach Update and projects (Aktualizowanie Blazor WebAssembly projektów) i Blazor Server Update projects (Aktualizowanie Blazor WebAssembly projektów).
W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w witrynie Azure Portal do używania identyfikatora Microsoft Entra ID (ME-ID) dla kont Microsoft:
Aplikacja wymaga
openid
zakresów ioffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
W bloku Uwierzytelnianie rejestracji aplikacji w witrynie Azure Portal:
- Usuń konfigurację platformy sieci Web .
- Dodaj konfigurację platformy aplikacji jednostronicowej przy użyciu identyfikatora URI przekierowania aplikacji.
- Wyłącz niejawne udzielanie tokenów dostępu i tokenów identyfikatorów.
Aby uzyskać więcej informacji, zobacz Zabezpieczanie autonomicznej aplikacji ASP.NET Core Blazor WebAssembly przy użyciu kont Microsoft.
Autonomiczna Blazor WebAssembly aplikacja z identyfikatorem Entra firmy Microsoft (ME-ID)
Postępuj zgodnie ze wskazówkami w poprzednich sekcjach Update and projects (Aktualizowanie Blazor WebAssembly projektów) i Blazor Server Update projects (Aktualizowanie Blazor WebAssembly projektów).
W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w witrynie Azure Portal do korzystania z identyfikatora Entra firmy Microsoft (ME-ID):
Aplikacja wymaga
https://graph.microsoft.com/User.Read
zakresu:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
W bloku Uwierzytelnianie rejestracji aplikacji w witrynie Azure Portal:
- Usuń konfigurację platformy sieci Web .
- Dodaj konfigurację platformy aplikacji jednostronicowej przy użyciu identyfikatora URI przekierowania aplikacji.
- Wyłącz niejawne udzielanie tokenów dostępu i tokenów identyfikatorów.
Aby uzyskać więcej informacji, zobacz Secure an ASP.NET Core standalone app with Microsoft Entra ID (Zabezpieczanie autonomicznej aplikacji ASP.NET Core Blazor WebAssembly przy użyciu identyfikatora Entra firmy Microsoft).
Aplikacja autonomiczna Blazor WebAssembly z usługą Azure Active Directory (AAD) B2C
Postępuj zgodnie ze wskazówkami w poprzednich sekcjach Update and projects (Aktualizowanie Blazor WebAssembly projektów) i Blazor Server Update projects (Aktualizowanie Blazor WebAssembly projektów).
W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w witrynie Azure Portal do korzystania z usługi Azure Active Directory (AAD) B2C:
Aplikacja wymaga
openid
zakresów ioffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
W bloku Uwierzytelnianie rejestracji aplikacji w witrynie Azure Portal:
- Usuń konfigurację platformy sieci Web .
- Dodaj konfigurację platformy aplikacji jednostronicowej przy użyciu identyfikatora URI przekierowania aplikacji.
- Wyłącz niejawne udzielanie tokenów dostępu i tokenów identyfikatorów.
Aby uzyskać więcej informacji, zobacz Secure an ASP.NET Core standalone app with Azure Active Directory B2C (Zabezpieczanie autonomicznej aplikacji ASP.NET Core Blazor WebAssembly za pomocą usługi Azure Active Directory B2C).
Hostowana Blazor WebAssembly aplikacja z identyfikatorem Entra firmy Microsoft (ME-ID) lub usługą AAD B2C
Postępuj zgodnie ze wskazówkami w poprzednich sekcjach Update and projects (Aktualizowanie Blazor WebAssembly projektów) i Blazor Server Update projects (Aktualizowanie Blazor WebAssembly projektów).
Rejestracja Client
aplikacji hostowanego Blazor rozwiązania korzystającego z usługi AAD lub AAD B2C na potrzeby uwierzytelniania użytkowników powinna używać konfiguracji platformy aplikacja systemu Azure s jednostronicowej aplikacji.
W bloku Uwierzytelnianie rejestracji aplikacji w witrynie Azure PortalClient
:
- Usuń konfigurację platformy sieci Web .
- Dodaj konfigurację platformy aplikacji jednostronicowej przy użyciu identyfikatora URI przekierowania aplikacji.
- Wyłącz niejawne udzielanie tokenów dostępu i tokenów identyfikatorów.
Aby uzyskać więcej informacji, zobacz:
- Zabezpieczanie hostowanej aplikacji ASP.NET Core Blazor WebAssembly przy użyciu identyfikatora Entra firmy Microsoft
- Zabezpieczanie hostowanej aplikacji ASP.NET Core Blazor WebAssembly za pomocą usługi Azure Active Directory B2C
Aktualizowanie projektu serwera hostowanego Blazor rozwiązania
Postępuj zgodnie ze wskazówkami w poprzednich sekcjach:
- Aktualizowanie Blazor WebAssembly i Blazor Server projekty
- Aktualizowanie Blazor WebAssembly projektów
- Sekcja, która ma zastosowanie do dostawcy aplikacji z usługą Azure Active Directory:
Server
Zaktualizuj projekt hostowanego Blazor rozwiązania jako aplikację ASP.NET Core, postępując zgodnie z ogólnymi wskazówkami w tym artykule.
Ponadto projekty, Server
które uwierzytelniają użytkowników w aplikacjach klienckich Blazor WebAssembly przy użyciu identyfikatora Microsoft Entra ID (ME-ID) lub B2C, powinny przyjąć nowe pakiety firmy Microsoft Identity w wersji 2.0:
W przypadku usługi AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
W przypadku usługi 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}" />
W przypadku poprzednich odwołań do pakietu określ wersje pakietów dla {VERSION}
symboli zastępczych w NuGet.org:
Uwaga
Zestaw SDK projektu w rozwiązaniu Server
hostowanym Blazor WebAssembly pozostaje:Microsoft.NET.Sdk.Web
<Project Sdk="Microsoft.NET.Sdk.Web">
Aby uzyskać więcej informacji, zobacz:
- Zabezpieczanie hostowanej aplikacji ASP.NET Core Blazor WebAssembly przy użyciu identyfikatora Entra firmy Microsoft
- Zabezpieczanie hostowanej aplikacji ASP.NET Core Blazor WebAssembly za pomocą usługi Azure Active Directory B2C
Czyszczenie i ponowne kompilowanie rozwiązania
Po przeprowadzeniu migracji aplikacji lub rozwiązania do platformy .NET 5 wyczyść i ponownie skompiluj aplikację lub rozwiązanie. Jeśli istnieją niezgodności pakietów między nowymi odwołaniami do pakietu i buforowanymi pakietami:
Wyczyść pamięci podręczne pakietów NuGet, wykonując następujące
dotnet nuget locals
polecenie w powłoce poleceń:dotnet nuget locals --clear all
Wyczyść i ponownie skompiluj aplikację lub rozwiązanie.
Rozwiązywanie problemów
Postępuj zgodnie ze wskazówkami dotyczącymi rozwiązywania problemów na końcu tematu Blazor WebAssembly zabezpieczeń, który ma zastosowanie do aplikacji:
Autonomiczne aplikacje zestawu Blazor WebAssembly:
- Ogólne wskazówki dotyczące dostawców OIDC i biblioteki uwierzytelniania zestawu WebAssembly
- Konta Microsoft
- Microsoft Entra ID (ME-ID)
- Usługa Azure Active Directory (AAD) B2C
Hostowane aplikacje zestawu Blazor WebAssembly:
Nieautoryzowany klient dla identyfikatora Entra firmy Microsoft (ME-ID)
Po uaktualnieniu aplikacji korzystającej Blazor WebAssembly z usługi AAD do uwierzytelniania może zostać wyświetlony następujący błąd podczas wywołania zwrotnego logowania do aplikacji po zalogowaniu się użytkownika za pomocą usługi AAD:
info: Autoryzacja Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] nie powiodła się. Te wymagania nie zostały spełnione: DenyAnonymousAuthorizationRequirement: Wymaga uwierzytelnionego użytkownika.
Błąd wywołania zwrotnego logowania z usługi AAD:
- Błąd:
unauthorized_client
- Opis:
AADB2C90058: The provided application is not configured to allow public clients.
Aby naprawić ten błąd:
- W witrynie Azure Portal uzyskaj dostęp do manifestu aplikacji.
allowPublicClient
Ustaw atrybut nanull
lubtrue
.
Aktualizowanie progresywnej Blazor aplikacji internetowej (PWA)
Dodaj następujący element do pliku projektu aplikacji PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Usuń link arkusza stylów izolacji CSS podglądu
Jeśli projekt wwwroot/index.html
(Blazor WebAssembly) lub Pages/_Host.cshtml
(Blazor Server) zawiera element arkusza <link>
stylów z scoped.styles.css
wcześniejszej wersji zapoznawczej 5.0, usuń <link>
tag:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Aktualizowanie Razor bibliotek klas (RCLS)
Migrowanie Razor bibliotek klas (RCLs) w celu korzystania z nowych interfejsów API lub funkcji, które są wprowadzane w ramach ASP.NET Core 5.0.
Aby zaktualizować listę RCL, która jest przeznaczona dla składników:
Zaktualizuj następujące właściwości w pliku projektu:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Zaktualizuj inne pakiety do najnowszych wersji. Najnowsze wersje można znaleźć w NuGet.org.
Aby zaktualizować listę RCL docelową MVC, zaktualizuj następujące właściwości w pliku projektu:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Aktualizowanie odwołań do pakietów
W pliku projektu zaktualizuj atrybut odwołania pakietu Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*i Atrybut pakietu System.Net.Http.Json do atrybutu Version
5.0.0.0 lub nowszego. Na przykład:
<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>
Aktualizowanie obrazów platformy Docker
W przypadku aplikacji korzystających z platformy Docker zaktualizuj instrukcje i skrypty dockerfileFROM
. Użyj obrazu podstawowego, który zawiera środowisko uruchomieniowe ASP.NET Core 5.0. Rozważ następującą docker pull
różnicę poleceń między ASP.NET Core 3.1 i 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
W ramach przenoszenia do platformy ".NET" jako nazwy produktu obrazy platformy Docker zostały przeniesione z mcr.microsoft.com/dotnet/core
repozytoriów do .mcr.microsoft.com/dotnet
Aby uzyskać więcej informacji, zobacz dotnet/dotnet-docker#1939.
Zmiany powiązań modelu w usługach ASP.NET Core MVC i Razor Pages
Wartości daty/godziny są powiązane z modelem zgodnie z godzinami UTC
W ASP.NET Core 3.1 i starszych DateTime
wartości były powiązane z modelem jako czas lokalny, gdzie strefa czasowa została określona przez serwer. DateTime
wartości powiązane z formatowania wejściowego (JSON) i DateTimeOffset
wartości były powiązane jako strefy czasowe UTC.
W ASP.NET Core 5.0 lub nowszym powiązanie modelu stale wiąże DateTime
wartości ze strefą czasową UTC.
Aby zachować poprzednie zachowanie, usuń element w pliku DateTimeModelBinderProvider
:Startup.ConfigureServices
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder zastąp ciąg ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Aby dodać obsługę powiązań modelu dla typów rekordów języka C# 9, to ComplexTypeModelBinderProvider :
- Oznaczone jako przestarzałe.
- Nie zarejestrowano już domyślnie.
Aplikacje, które opierają się na obecności ComplexTypeModelBinderProvider
elementu w ModelBinderProviders
kolekcji, muszą odwoływać się do nowego dostawcy binder:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
Przestarzałe useDatabaseErrorPage
Szablony ASP.NET Core 3.1 zawierające opcję dla poszczególnych kont użytkowników generują wywołanie metody UseDatabaseErrorPage. UseDatabaseErrorPage
element jest teraz przestarzały i powinien zostać zastąpiony AddDatabaseDeveloperPageExceptionFilter
kombinacją elementów i UseMigrationsEndPoint
, jak pokazano w poniższym kodzie:
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();
}
Aby uzyskać więcej informacji, zobacz ten problem w serwisie GitHub.
ASP.NET Core Module (ANCM)
Jeśli moduł ASP.NET Core Module (ANCM) nie był wybranym składnikiem, gdy program Visual Studio został zainstalowany lub czy wcześniejsza wersja narzędzia ANCM została zainstalowana w systemie, pobierz najnowszy Instalator pakietu hostingowego platformy .NET Core (pobieranie bezpośrednie) i uruchom instalatora. Aby uzyskać więcej informacji, zobacz Hosting Bundle (Pakiet hostingu).
Zmiany odwołania do pakietu wpływające na niektóre pakiety NuGet
Podczas migracji niektórych Microsoft.Extensions.*
pakietów NuGet z repozytorium dotnet/extensions do dotnet/runtime zgodnie z opisem w temacie Migrowanie zawartości dotnet/extensions do dotnet/runtime i dotnet/aspnet/aspnetcore (aspnet/Anonss #411) zmiany pakietów są stosowane do niektórych migrowanych pakietów. Te zmiany często powodują zmiany przestrzeni nazw dla interfejsu API platformy .NET.
Aby dokładniej zbadać interfejsy API pod kątem zmian przestrzeni nazw aplikacji podczas migracji do wersji 5.0, użyj przeglądarki interfejsu API platformy .NET.
Migrowanie microsoft.Identity. Sieć
Na poniższych stronach wiki wyjaśniono, jak przeprowadzić migrację rozwiązania Microsoft.Identity. Sieć Web z ASP.NET Core 3.1 do 5.0:
- Microsoft.Identity. Sieć Web w aplikacjach internetowych
- Microsoft.Identity. Sieć Web w internetowych interfejsach API
W poniższych samouczkach wyjaśniono również migrację:
- Aplikacja internetowa ASP.NET Core logując użytkowników za pomocą platformy Microsoft identity w organizacji. Zobacz Opcję 2. Utwórz przykład z wiersza polecenia.
- Zaloguj użytkownika przy użyciu platformy Microsoft identity w aplikacji klasycznej WPF i wywołaj interfejs API sieci Web platformy ASP.NET Core. Zobacz Jak został utworzony kod.
Przeglądanie zmian powodujących niezgodność
Aby uzyskać zmiany powodujące niezgodność z platformy .NET Core 3.1 do .NET 5.0, zobacz Istotne zmiany migracji z wersji 3.1 do 5.0. Na liście znajdują się również ASP.NET Core i Entity Framework Core.