Partager via


Migrer d’ASP.NET Core 6.0 vers 7.0

Cet article explique comment mettre à jour un projet ASP.NET Core 6.0 existant vers ASP.NET Core 7.0.

Prérequis

Mettre à jour la version du SDK .NET Core dans global.json

Si vous comptez sur un fichier global.json pour cibler une version spécifique du kit SDK .NET Core, mettez à jour la propriété version vers la version du SDK .NET 7.0 qui est installée. Par exemple :

{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

Mettre à jour le framework cible

Mettez à jour le moniker de framework cible (TFM) du fichier projet vers net7.0 :

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

</Project>

Mettre à jour les références de package

Dans le fichier projet, mettez à jour chaque référence de package Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.* et System.Net.Http.Json avec l’attribut Version 7.0.0 ou version ultérieure. Par exemple :

<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

Adopter les fonctionnalités de .NET 7

Après avoir suivi les instructions pour mettre à jour une application vers la version 7.0 plus haut dans cet article, adoptez des fonctionnalités spécifiques en suivant les liens dans Nouveautés d'ASP.NET Core 7.0.

Pour adopter toutes les nouvelles fonctionnalités 7.0 pour les applications Blazor, nous vous recommandons de suivre la procédure suivante :

  • Créez un nouveau projet Blazor 7.0 à partir de l'un des modèles de projet Blazor. Pour plus d’informations, consultez Outils pour ASP.NET Core Blazor.
  • Déplacez les composants et le code de l'application vers l'application 7.0 en apportant des modifications pour adopter les nouvelles fonctionnalités 7.0.

Migrer l’interopérabilité JavaScript démarshalée

L’interopérabilité démarshalée à l’aide de l’interface IJSUnmarshalledRuntime est obsolète et doit être remplacée par l’interopérabilité [JSImport]/[JSExport] JavaScript.

Pour plus d’informations, consultez la section Interopérabilité JSImport/JSExport JavaScript avec ASP.NET Core Blazor.

L’authentification Blazor WebAssembly utilise l’état de l’historique pour les redirections

La prise en charge de l’authentification dans les applications Blazor WebAssembly a changé de façon à s’appuyer sur l’état de l’historique de navigation au lieu de chaînes de requête dans l’URL. Par conséquent, passer l’URL de retour via la chaîne de requête fait échouer la redirection vers la page d’origine après une connexion réussie dans .NET 7.

L’exemple suivant illustre l’approche de redirection antérieure pour les applications qui ciblent .NET 6 ou une version antérieure, qui est basée sur une URL de redirection (?returnUrl=) avec 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’exemple suivant illustre la nouvelle approche de redirection pour les applications qui ciblent .NET 7 ou version ultérieure, basée sur l’état de l’historique de navigation avec 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);
    }
}

Dans le cadre de cette modification, SignOutSessionStateManager est obsolète dans .NET 7 ou version ultérieure et remplacé par NavigateToLogout.

L’exemple suivant illustre l’approche précédente dans Shared/LoginDisplay.razor d’une application générée à partir du modèle de projet Blazor WebAssembly :

@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

L’exemple suivant illustre la nouvelle approche qui appelle NavigateToLogout. L’injection (@inject) du SignOutSessionStateManager est supprimée des directives du composant en haut du fichier, et la BeginLogOut méthode est mise à jour vers le code suivant :

@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

L’inscription du service SignOutSessionStateManager est supprimée dans Program.cs :

- builder.Services.AddScoped<SignOutSessionStateManager>();

Pour plus d’informations, consultez les ressources suivantes :

Outils de génération .NET WebAssembly pour les projets .NET 6

Vous pouvez maintenant utiliser les outils de génération .NET WebAssembly avec un projet .NET 6 lorsque vous utilisez le kit de développement logiciel (SDK) .NET 7. La nouvelle charge de travail wasm-tools-net6 inclut les outils de génération .NET WebAssembly pour les projets .NET 6 afin qu’ils puissent être utilisés avec le SDK .NET 7. La charge de travail existante wasm-tools installe les outils de génération WebAssembly .NET pour les projets .NET 7. Toutefois, la version .NET 7 des outils de génération .NET WebAssembly est incompatible avec les projets existants créés avec .NET 6. Les projets utilisant les outils de génération .NET WebAssembly qui doivent prendre en charge .NET 6 et .NET 7 doivent utiliser le multi-ciblage.

Mettre à jour les images Docker

Pour les applications utilisant Docker, mettez à jour vos instructions et scripts Dockerfile FROM. Utilisez une image de base qui inclut le runtime ASP.NET Core 7.0. Considérez la différence de commande docker pull suivante entre ASP.NET Core 6.0 et 7.0 :

- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0

Examiner les changements avec rupture

Pour connaître les changements cassants de .NET Core 6.0 vers .NET 7.0, consultez Changements cassants dans .NET 7. ASP.NET Core et Entity Framework Core sont inclus dans la liste.