Eseguire la migrazione da ASP.NET Core 3.1 a 5.0
Questo articolo illustra come aggiornare un progetto di ASP.NET Core 3.1 esistente a ASP.NET Core 5.0. Per istruzioni su come eseguire la migrazione da ASP.NET Core 3.1 a ASP.NET Core 6.0, vedere Eseguire la migrazione da ASP.NET Core 3.1 a 6.0.
Prerequisiti
- Visual Studio 2019 16.8 o versione successiva con il carico di lavoro Sviluppo ASP.NET e Web
- .NET 5.0 SDK
Aggiornare la versione di .NET Core SDK in global.json
Se si usa un global.json file per specificare come destinazione una versione specifica di .NET Core SDK, aggiornare la version
proprietà alla versione di .NET 5.0 SDK installata. Ad esempio:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Aggiornare il framework di destinazione
Se si aggiorna un Blazor WebAssembly progetto, passare alla sezione Aggiorna Blazor WebAssembly progetti . Per qualsiasi altro tipo di progetto ASP.NET Core, aggiornare il moniker del framework di destinazione del file di progetto (TFM) in net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Eliminare bin
e obj
cartelle
Potrebbe essere necessario eliminare le bin
cartelle e obj
. Eseguire dotnet nuget locals --clear all
per cancellare la cache dei pacchetti NuGet.
Modifiche alla Blazor logica di routing delle app nella versione 5.0.1 e altre versioni 5.x fino alla 6.0
Il calcolo della precedenza della route è stato modificato nella versione patch ASP.NET Core 5.0.1. Ciò può influire sull'utente se sono state definite route o route catch-all con parametri facoltativi.
Comportamento precedente
Con il comportamento precedente in ASP.NET Core 5.0.0 o versioni precedenti, le route con precedenza inferiore, ad esempio , vengono confrontate prima delle route con precedenza più elevata, ad esempio {*slug}
/customer/{id}
.
Nuovo comportamento
Il nuovo comportamento in ASP.NET Core 5.0.1 o versioni successive corrisponde più strettamente al comportamento di routing definito nelle app ASP.NET Core, in cui il framework calcola e stabilisce la precedenza di route per ogni segmento per primo e usa solo la lunghezza della route per interrompere i legami come criteri secondari.
Motivo della modifica
Il comportamento originale è considerato un bug nell'implementazione perché l'obiettivo è che il Blazor sistema di routing si comporti nello stesso modo del sistema di routing ASP.NET Core per il subset di funzionalità supportate dal Blazor routing.
Azione consigliata
Aggiungere l'attributo PreferExactMatches
al Router
componente nel App.razor
file per acconsentire esplicitamente al comportamento corretto:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Quando PreferExactMatches
è impostato su @true
, la corrispondenza delle route preferisce corrispondenze esatte rispetto ai caratteri jolly.
Importante
Tutte le app devono essere impostate in modo esplicito su PreferExactMatches
@true
.
La possibilità di impostare su o lasciarlo non impostato PreferExactMatches
@false
è disponibile solo per la compatibilità con le versioni precedenti.
Quando viene rilasciato .NET 6, il router preferisce sempre corrispondenze esatte e l'opzione PreferExactMatches
non sarà disponibile.
Aggiornare Blazor WebAssembly e Blazor Server progetti
Le indicazioni contenute in questa sezione si applicano a entrambi Blazor i modelli di hosting. Le sezioni seguenti in questa sezione forniscono indicazioni aggiuntive specifiche per l'hosting di modelli e tipi di app. Applicare le linee guida da tutte le sezioni pertinenti all'app.
In
wwwroot/index.html
di un'app Blazor WebAssembly oPages/_Host.cshtml
di un'app Blazor Server aggiungere un<link>
elemento all'elemento per gli<head>
stili. Nei valori di attributo dell'elementohref
seguenti<link>
, il segnaposto{ASSEMBLY NAME}
è il nome dell'assembly dell'app.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Autonomo Blazor WebAssembly o Blazor Server esempio:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
progetto di un esempio di soluzione ospitata Blazor WebAssembly :+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Includere un nuovo spazio dei nomi nel file dell'app per la virtualizzazione dei
_Imports.razor
componenti, Microsoft.AspNetCore.Components.Web.Virtualization. I file seguenti_Imports.razor
mostrano gli spazi dei nomi predefiniti nelle app generate dai modelli di Blazor progetto. Il segnaposto{ASSEMBLY NAME}
è il nome dell'assembly dell'app.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
Nel componente () racchiudere il
MainLayout
markup HTML del componente con un<div>
elemento con unclass
attributo impostato supage
:Shared/MainLayout.razor
<div class="page"> ... </div>
Aggiungere i file seguenti alla
Shared
cartella :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; } }
Il file di base
wwwroot/css/app.css
più recente di un'app owwwroot/css/site.css
di un Blazor WebAssembly file di un'app Blazor Server include gli stili seguenti. Rimuovi stili aggiuntivi lasciando gli stili seguenti e tutti gli stili aggiunti all'app.Il foglio di stile seguente include solo gli stili di base e non include gli stili personalizzati aggiunti dallo sviluppatore:
@import url('open-iconic/font/css/open-iconic-bootstrap.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; }
Aggiornare progetti Blazor WebAssembly
Seguire le indicazioni riportate nella sezione Precedente Aggiornamento Blazor WebAssembly e Blazor Server progetti .
Per un Blazor WebAssembly progetto, incluso il Client
progetto di una soluzione ospitata Blazor , applicare le modifiche seguenti al file di progetto:
Aggiornare l'SDK da
Microsoft.NET.Sdk.Web
aMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Nota
Questo aggiornamento si applica solo ai progetti autonomi Blazor WebAssembly e ai
Client
progetti di soluzioni ospitate Blazor .Aggiornare le proprietà seguenti:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Rimuovere il riferimento al pacchetto a Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Aggiornare altri pacchetti alle versioni più recenti. Le versioni più recenti sono disponibili in NuGet.org.
In
wwwroot/index.html
modificare l'elemento che carica ilApp
componente in un<div>
elemento con unid
oggetto impostato suapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
In
Program.Main
(Program.cs
), modificare il riferimento all'elemento<app>
in un selettore CSS aggiungendo un hash#
ad esso:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
In
Program.Main
(Program.cs
), modificare una registrazione temporaneaHttpClient
predefinita impostando l'ambito, se presente:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
In
Program.Main
(Program.cs
) dell'appClient
delle soluzioni ospitate Blazor :- Facoltativamente, sostituire
builder.HostEnvironment.BaseAddress
per gli indirizzi di base client stringa. - Modificare tutte le registrazioni predefinite client temporanee denominate impostando l'ambito.
-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"));
Nel codice precedente il
{APP NAMESPACE}
segnaposto è lo spazio dei nomi dell'app.- Facoltativamente, sostituire
App autonoma Blazor WebAssembly con account Microsoft
Seguire le linee guida riportate nelle sezioni Aggiornare Blazor WebAssembly e Blazor Server progetti e Aggiornare Blazor WebAssembly i progetti .
Per un'app autonoma Blazor WebAssembly registrata nel portale di Azure usare Azure Active Directory (AAD) per gli account Microsoft:
L'app richiede gli
openid
ambiti eoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Nel pannello autenticazione di registrazione dell'app portale di Azure:
- Rimuovere la configurazione della piattaforma Web .
- Aggiungere una configurazione della piattaforma dell'applicazione a pagina singola con l'URI di reindirizzamento dell'app.
- Disabilitare la concessione implicita per token di accesso e token ID.
Per altre informazioni, vedere Proteggere un'app autonoma ASP.NET Core Blazor WebAssembly con account Microsoft.
App autonoma Blazor WebAssembly con Azure Active Directory (AAD)
Seguire le linee guida riportate nelle sezioni Aggiornare Blazor WebAssembly e Blazor Server progetti e Aggiornare Blazor WebAssembly i progetti .
Per un'app autonoma Blazor WebAssembly registrata nel portale di Azure usare Azure Active Directory (AAD):
L'app richiede l'ambito
https://graph.microsoft.com/User.Read
:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Nel pannello autenticazione di registrazione dell'app portale di Azure:
- Rimuovere la configurazione della piattaforma Web .
- Aggiungere una configurazione della piattaforma dell'applicazione a pagina singola con l'URI di reindirizzamento dell'app.
- Disabilitare la concessione implicita per token di accesso e token ID.
Per altre informazioni, vedere Proteggere un'app autonoma ASP.NET Core Blazor WebAssembly con Azure Active Directory.
App autonoma Blazor WebAssembly con Azure Active Directory (AAD) B2C
Seguire le linee guida riportate nelle sezioni Aggiornare Blazor WebAssembly e Blazor Server progetti e Aggiornare Blazor WebAssembly i progetti .
Per un'app autonoma Blazor WebAssembly registrata nel portale di Azure usare Azure Active Directory (AAD) B2C:
L'app richiede gli
openid
ambiti eoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Nel pannello Autenticazione registrazione app portale di Azure:
- Rimuovere la configurazione della piattaforma Web .
- Aggiungere una configurazione della piattaforma applicazione a pagina singola con l'URI di reindirizzamento dell'app.
- Disabilitare la concessione implicita per i token di accesso e i token ID.
Per altre informazioni, vedere Proteggere un'app autonoma ASP.NET Core Blazor WebAssembly con Azure Active Directory B2C.
App ospitata Blazor WebAssembly con Azure Active Directory (AAD) o AAD B2C
Seguire le indicazioni riportate nelle sezioni Precedenti Aggiornamenti Blazor WebAssembly e Blazor Server progetti e Aggiorna Blazor WebAssembly progetti .
La Client
registrazione dell'app di una soluzione ospitata Blazor che usa AAD o AAD B2C per l'autenticazione utente deve usare una configurazione della piattaforma App di Azure a pagina singola .
Nel pannello Autenticazione registrazione app portale di AzureClient
:
- Rimuovere la configurazione della piattaforma Web .
- Aggiungere una configurazione della piattaforma applicazione a pagina singola con l'URI di reindirizzamento dell'app.
- Disabilitare la concessione implicita per i token di accesso e i token ID.
Per altre informazioni, vedere:
- Proteggere un'app ASP.NET Core Blazor WebAssembly ospitata con Azure Active Directory
- Proteggere un'app ASP.NET Core Blazor WebAssembly ospitata con Azure Active Directory B2C
Aggiornare il progetto Server di una soluzione ospitata Blazor
Seguire le indicazioni riportate nelle sezioni precedenti:
- Aggiornare Blazor WebAssembly e Blazor Server progetti
- Aggiornare Blazor WebAssembly i progetti
- Sezione che si applica al provider dell'app con Azure Active Directory:
Aggiornare il Server
progetto di una soluzione ospitata Blazor come app ASP.NET Core seguendo le indicazioni generali in questo articolo.
Inoltre, Server
i progetti che autenticano gli utenti alle app client Blazor WebAssembly con Azure Active Directory (AAD) o B2C devono adottare nuovi pacchetti Microsoft Identity v2.0:
Per AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Per 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}" />
Per i riferimenti al pacchetto precedente, determinare le versioni del pacchetto per i {VERSION}
segnaposto in NuGet.org:
Nota
L'SDK del Server
progetto in una soluzione ospitata Blazor WebAssembly rimane Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Per altre informazioni, vedere:
- Proteggere un'app ASP.NET Core Blazor WebAssembly ospitata con Azure Active Directory
- Proteggere un'app ASP.NET Core Blazor WebAssembly ospitata con Azure Active Directory B2C
Pulire e ricompilare la soluzione
Dopo aver eseguito la migrazione dell'app o della soluzione a .NET 5, pulire e ricompilare l'app o la soluzione. Se esistono incompatibilità dei pacchetti tra i nuovi riferimenti al pacchetto e i pacchetti memorizzati nella cache:
Cancellare le cache dei pacchetti NuGet eseguendo il comando seguente
dotnet nuget locals
in una shell dei comandi:dotnet nuget locals --clear all
Pulire e ricompilare l'app o la soluzione.
Risolvere problemi
Seguire le indicazioni sulla risoluzione dei problemi alla fine dell'argomento Blazor WebAssembly di sicurezza che si applica all'app:
App Blazor WebAssembly autonome:
- Indicazioni generali per i provider OIDC e la libreria di autenticazione WebAssembly
- Account Microsoft
- Azure Active Directory (AAD)
- Azure Active Directory (AAD) B2C
App Blazor WebAssembly ospitate:
Client non autorizzato per Azure Active Directory (AAD)
Dopo l'aggiornamento di un'app Blazor WebAssembly che usa AAD per l'autenticazione, è possibile che venga visualizzato l'errore seguente nel callback di accesso all'app dopo l'accesso dell'utente con AAD:
info: Autorizzazione Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Non riuscita. Questi requisiti non sono stati soddisfatti: DenyAnonymousAuthorizationRequirement: richiede un utente autenticato.
Errore di callback di accesso da AAD:
- Errore:
unauthorized_client
- Descrizione:
AADB2C90058: The provided application is not configured to allow public clients.
Per risolvere l'errore:
- Nella portale di Azure accedere al manifesto dell'app.
- Impostare l'attributo
allowPublicClient
sunull
otrue
.
Aggiornare un'applicazione Blazor Web progressiva (PWA)
Aggiungere l'elemento seguente al file di progetto dell'app PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Rimuovere il collegamento del foglio di stile di isolamento CSS di anteprima
Se il progetto (wwwroot/index.html
) o Pages/_Host.cshtml
(Blazor WebAssemblyBlazor Server) contiene un elemento del foglio <link>
di stile per scoped.styles.css
da una versione di anteprima 5.0 precedente, rimuovere il <link>
tag:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Aggiornare Razor le librerie di classi (RCLs)
Eseguire la migrazione Razor delle librerie di classi (RCL) per sfruttare nuove API o funzionalità introdotte come parte di ASP.NET Core 5.0.
Per aggiornare un RCL destinato ai componenti:
Aggiornare le proprietà seguenti nel file di progetto:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Aggiornare altri pacchetti alle versioni più recenti. Le versioni più recenti sono disponibili in NuGet.org.
Per aggiornare un oggetto RCL destinato a MVC, aggiornare le proprietà seguenti nel file di progetto:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Aggiornare i riferimenti del pacchetto
Nel file di progetto aggiornare ogni attributo del pacchetto Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*e l'attributo del Version
pacchetto System.Net.Http.Json a 5.0.0 o versione successiva. Ad esempio:
<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>
Aggiornare le immagini Docker
Per le app che usano Docker, aggiornare le istruzioni e gli script DockerfileFROM
. Usare un'immagine di base che include il runtime di ASP.NET Core 5.0. Prendere in considerazione la differenza di comando seguente docker pull
tra ASP.NET Core 3.1 e 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Come parte del passaggio a ".NET" come nome del prodotto, le immagini Docker sono state spostate dai mcr.microsoft.com/dotnet/core
repository a mcr.microsoft.com/dotnet
. Per altre informazioni, vedere dotnet/dotnet-docker#1939.
Modifiche all'associazione dei modelli in ASP.NET Core MVC e Razor Pages
I valori DateTime sono associati a modelli come orari UTC
In ASP.NET Core 3.1 e versioni precedenti, DateTime
i valori sono associati a modelli come ora locale, dove il fuso orario è stato determinato dal server. DateTime
i valori associati dalla formattazione di input (JSON) e DateTimeOffset
i valori sono associati come fuso orario UTC.
In ASP.NET Core 5.0 e versioni successive, l'associazione di modelli associa DateTime
in modo coerente i valori al fuso orario UTC.
Per conservare il comportamento precedente, rimuovere l'oggetto DateTimeModelBinderProvider
in Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder sostituisci ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Per aggiungere il supporto per i tipi di record C# 9 di binding del modello, è ComplexTypeModelBinderProvider :
- Annotato come obsoleto.
- Non più registrato per impostazione predefinita.
Le app che si basano sulla presenza dell'oggetto ComplexTypeModelBinderProvider
ModelBinderProviders
nella raccolta devono fare riferimento al nuovo provider di binding:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage obsoleto
I modelli ASP.NET Core 3.1 che includono un'opzione per singoli account utente generano una chiamata a UseDatabaseErrorPage. UseDatabaseErrorPage
è ora obsoleto e deve essere sostituito con una combinazione di AddDatabaseDeveloperPageExceptionFilter
e UseMigrationsEndPoint
, come illustrato nel codice seguente:
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();
}
Per altre informazioni, vedere questo problema in GitHub.
modulo ASP.NET Core (ANCM)
Se il modulo di ASP.NET Core (ANCM) non era un componente selezionato quando Visual Studio è stato installato o se una versione precedente di ANCM è stata installata nel sistema, scaricare il programma di installazione più recente del pacchetto di hosting .NET Core (download diretto) ed eseguire il programma di installazione. Per altre informazioni, vedere Bundle di hosting.
Modifiche di riferimento al pacchetto che influiscono su alcuni pacchetti NuGet
Con la migrazione di alcuni Microsoft.Extensions.*
pacchetti NuGet dal repository dotnet/extensions a dotnet / runtime, come descritto in Migrazione del contenuto dotnet/ extensions a dotnet/runtime e dotnet/aspnetcore (aspnet/Annunci #411), le modifiche alla creazione di pacchetti vengono applicate a alcuni pacchetti migrati. Queste modifiche spesso comportano modifiche dello spazio dei nomi per l'API .NET.
Per cercare altre API per le modifiche dello spazio dei nomi delle app durante la migrazione alla versione 5.0, usare il browser api .NET.
Eseguire la migrazione di Microsoft.Identity. Web
Le pagine wiki seguenti illustrano come eseguire la migrazione di Microsoft.Identity. Web da ASP.NET Core 3.1 a 5.0:
Le esercitazioni seguenti illustrano anche la migrazione:
- Un'app Web ASP.NET Core che accede agli utenti con il Microsoft Identity Platform nell'organizzazione. Vedere Opzione 2: Creare l'esempio dalla riga di comando.
- Accedere a un utente con Microsoft Identity Piattaforma in un'applicazione desktop WPF e chiamare un'API Web ASP.NET Core. Vedere Come è stato creato il codice.
Esaminare le modifiche che causano un'interruzione
Per le modifiche di rilievo da .NET Core 3.1 a .NET 5.0, vedere Modifiche di rilievo per la migrazione dalla versione 3.1 alla versione 5.0. ASP.NET Core ed Entity Framework Core sono inclusi anche nell'elenco.