Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment mettre à jour un projet ASP.NET Core existant dans .NET 6 vers .NET 7.
Prerequisites
Visual Studio 2022 avec la charge de travail Développement web et ASP.NET.
Mettre à jour la version du Kit de développement logiciel (SDK) .NET dans global.json
Si vous vous appuyez sur un global.json fichier pour cibler une version spécifique du Kit de développement logiciel (SDK) .NET, mettez à jour la version propriété vers la version du SDK .NET 7 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 décrites plus haut dans cet article pour mettre à jour une application vers .NET 7, adoptez des fonctionnalités spécifiques en suivant les liens dans Les nouveautés de ASP.NET Core dans .NET 7.
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.
Simplifier la liaison de paramètres de composant
Dans les versions antérieures Blazor , la liaison entre plusieurs composants requis pour les propriétés avec get/set des accesseurs.
Dans .NET 6 ou version antérieure :
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />
@code {
...
private string BoundValue
{
get => ChildMessage ?? string.Empty;
set => ChildMessageChanged.InvokeAsync(value);
}
}
Dans .NET 7, vous pouvez utiliser les nouveaux @bind:get modificateurs @bind:set pour prendre en charge la liaison de données bidirectionnelle et simplifier la syntaxe de liaison :
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage"
@bind-GrandchildMessage:set="ChildMessageChanged" />
Pour plus d’informations, consultez le contenu suivant dans l’article de liaison de données :
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 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 , RedirectToLogin.razorqui 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 , RedirectToLogin.razorqui est 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 dans Shared/LoginDisplay.razor cet appel 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 :
- [Changement cassant] : Mises à jour à l’authentification dans les applications webassembly
- navigation de ASP.NET Core Blazor
- Sécuriser ASP.NET Core Blazor WebAssembly
- Authentification et autorisation avec ASP.NET Core Blazor
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 DockerfileFROM. Utilisez une image de base qui inclut le ASP.NET Core dans le runtime .NET 7. Considérez la différence de commande suivante docker pull entre ASP.NET Core dans .NET 6 et .NET 7 :
- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0
Modifications majeures
Utilisez les articles des modifications de rupture dans .NET pour rechercher les modifications de rupture qui peuvent s’appliquer lors de la mise à jour d'une application vers une version plus récente de .NET.