Eseguire la migrazione da ASP.NET Core 6.0 alla versione 7.0
Questo articolo illustra come aggiornare un progetto ASP.NET Core 6.0 esistente a ASP.NET Core 7.0.
Prerequisiti
Visual Studio 2022 con il carico di lavoro Sviluppo ASP.NET e Web.
Aggiornare la versione di .NET Core SDK in global.json
Se si fa affidamento su un global.json file per specificare una versione specifica di .NET Core SDK, aggiornare la version
proprietà alla versione di .NET 7.0 SDK installata. Ad esempio:
{
"sdk": {
- "version": "6.0.200"
+ "version": "7.0.100"
}
}
Aggiornare il framework di destinazione
Aggiornare il moniker del framework di destinazione del file di progetto (TFM) a net7.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
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
riferimento al pacchetto System.Net.Http.Json alla versione 7.0.0 o successiva. Ad esempio:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.9" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.9" />
- <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="7.0.0" />
</ItemGroup>
Blazor
Adottare le funzionalità di .NET 7
Dopo aver seguito le indicazioni riportate in precedenza in questo articolo per aggiornare un'app alla versione 7.0, adottare funzionalità specifiche seguendo i collegamenti in Novità di ASP.NET Core 7.0.
Per adottare tutte le nuove funzionalità 7.0 per Blazor le app, è consigliabile eseguire il processo seguente:
- Creare un nuovo progetto 7.0 Blazor da uno dei Blazor modelli di progetto. Per altre informazioni, vedere Strumenti per ASP.NET Core Blazor.
- Spostare i componenti e il codice dell'app nell'app 7.0 apportando modifiche per adottare le nuove funzionalità 7.0.
Semplificare l'associazione dei parametri del componente
Nelle versioni precedenti Blazor , l'associazione tra più componenti richiede l'associazione alle proprietà con get
/set
le funzioni di accesso.
In .NET 6 e versioni precedenti:
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />
@code {
...
private string BoundValue
{
get => ChildMessage ?? string.Empty;
set => ChildMessageChanged.InvokeAsync(value);
}
}
In .NET 7 è possibile usare i nuovi @bind:get
modificatori e @bind:set
per supportare il data binding bidirezionale e semplificare la sintassi di associazione:
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage"
@bind-GrandchildMessage:set="ChildMessageChanged" />
Per altre informazioni, vedere il contenuto seguente nell'articolo Data binding :
Eseguire la migrazione dell'interoperabilità JavaScript nonmarshalled
L'interoperabilità unmarshalled tramite l'interfaccia IJSUnmarshalledRuntime è obsoleta e deve essere sostituita con l'interoperabilità JavaScript/[JSImport]
[JSExport]
.
Per altre informazioni, vedere Interoperabilità JSImport/JSExport JavaScript con ASP.NET Core Blazor.
Blazor WebAssembly l'autenticazione usa lo stato della cronologia per i reindirizzamenti
Il supporto per l'autenticazione nelle Blazor WebAssembly app è stato modificato in modo da basarsi sullo stato della cronologia di spostamento anziché sulle stringhe di query nell'URL. Di conseguenza, il passaggio dell'URL restituito tramite la stringa di query non riesce a eseguire il reindirizzamento alla pagina originale dopo un accesso riuscito in .NET 7.
L'esempio seguente illustra l'approccio di reindirizzamento precedente per le app destinate a .NET 6 o versioni precedenti in RedirectToLogin.razor
, che si basa su un URL di reindirizzamento (?returnUrl=
) con NavigateTo:
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
L'esempio seguente illustra il nuovo approccio di reindirizzamento per le app destinate a .NET 7 o versione successiva in RedirectToLogin.razor
, che si basa sullo stato della cronologia di spostamento con NavigateToLogin:
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options
@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
protected override void OnInitialized()
{
Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
}
}
Come parte di questa modifica, SignOutSessionStateManager è obsoleto in .NET 7 o versione successiva e sostituito con NavigateToLogout.
L'esempio seguente illustra l'approccio precedente in Shared/LoginDisplay.razor
un'app generata dal Blazor WebAssembly modello di progetto:
@inject SignOutSessionStateManager SignOutManager
...
@code{
private async Task BeginLogout(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
Nell'esempio seguente viene illustrato il nuovo approccio in Shared/LoginDisplay.razor
che chiama NavigateToLogout. L'inserimento (@inject
) di SignOutSessionStateManager viene rimosso dalle direttive del componente all'inizio del file e il BeginLogOut
metodo viene aggiornato al codice seguente:
@code{
public void BeginLogOut()
{
Navigation.NavigateToLogout("authentication/logout");
}
}
La registrazione del SignOutSessionStateManager servizio viene rimossa in Program.cs
:
- builder.Services.AddScoped<SignOutSessionStateManager>();
Per ulteriori informazioni, vedi le seguenti risorse:
- [Modifica che causa un'interruzione]: aggiornamenti all'autenticazione nelle applicazioni webassembly
- ASP.NET routing e navigazione core Blazor
- Secure ASP.NET Core Blazor WebAssembly
- Autenticazione e autorizzazione per ASP.NET Core Blazor
Strumenti di compilazione .NET WebAssembly per progetti .NET 6
È ora possibile usare gli strumenti di compilazione .NET WebAssembly con un progetto .NET 6 quando si usa .NET 7 SDK. Il nuovo wasm-tools-net6
carico di lavoro include gli strumenti di compilazione .NET WebAssembly per i progetti .NET 6 in modo che possano essere usati con .NET 7 SDK. Il carico di lavoro esistente wasm-tools
installa gli strumenti di compilazione .NET WebAssembly per i progetti .NET 7. Tuttavia, la versione .NET 7 degli strumenti di compilazione .NET WebAssembly non è compatibile con i progetti esistenti compilati con .NET 6. I progetti che usano gli strumenti di compilazione .NET WebAssembly che devono supportare sia .NET 6 che .NET 7 devono usare multitargeting.
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 7.0. Considerare la differenza di comando seguente docker pull
tra ASP.NET Core 6.0 e 7.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0
Rivedere le modifiche che causano un'interruzione
Per modifiche di rilievo da .NET Core 6.0 a .NET 7.0, vedere Modifiche di rilievo in .NET 7. ASP.NET Core ed Entity Framework Core sono inclusi nell'elenco.