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

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.

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à di importazione/JSesportazione JavaScript JScon ASP.NET CoreBlazor.

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, basate 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, basate 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 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:

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.