Partager via


Écrire et déboguer du code en cours d’exécution avec rechargement à chaud dans Visual Studio (C#, Visual Basic, C++)

À compter de Visual Studio 2022, l’expérience de rechargement à chaud dans Visual Studio fonctionne à la fois pour les applications .NET managées et natives C++. Quel que soit le type d’application sur lequel vous travaillez, l’intention du rechargement à chaud consiste à réduire autant que possible les redémarrages d’application entre les modifications, et vous rend plus productif en réduisant le temps passé à attendre que les applications se reconstruisent, redémarrent et naviguent à nouveau vers l'endroit précédent où vous vous trouviez dans l'application.

Nous améliorons la productivité en vous permettant de modifier les fichiers de code de votre application et d’appliquer immédiatement les modifications de code à l’application en cours d’exécution, ce qui porte le nom de rechargement à chaud. Une fois vos modifications appliquées, réexécutez votre code en effectuant une action dans l’application elle-même (ou via un certain type de minuteur, etc.) et voyez immédiatement les modifications ; aucune suspension de l’application par le biais de points d’arrêt n’est nécessaire !

Mettre à jour le code en cours d’exécution avec le Rechargement à chaud

  1. Ouvrez un projet en fonction d’un type d’application pris en charge. Consultez les applications prises en charge par .NET et C++ .

  2. Démarrez l’application avec le débogueur joint en utilisant F5 ou, si pris en charge, Ctrl+F5.

  3. Ouvrez un fichier de code et modifiez le code.

  4. Appliquez les modifications de code à l’aide du bouton Rechargement à chaudIcône de rechargement à chaud, ou appuyez sur Alt+F10.

    Capture d’écran du Rechargement à chaud.

Pour afficher les modifications apportées à l’interface utilisateur, le code doit être réexécuté. Par exemple, le code-behind d’un bouton doit être réexécuté, ou le code qui est déclenché à un intervalle via un minuteur. Comme autre exemple, ASP.NET Core prend en charge l’actualisation automatique du navigateur en raison de la fonctionnalité MetadataUpdateHandler.

Prise en charge des applications .NET

  • Lorsque vous utilisez Visual Studio 2022 et démarrez votre application avec le débogueur, l’expérience de rechargement à chaud de base fonctionne avec la plupart des types d’applications et de framework .NET. Cette prise en charge inclut .NET Framework, .NET Core et .NET 5+ (pour C# et Visual Basic, le cas échéant). Dans ce scénario, si vous utilisez le débogueur, vous devez supposer que le rechargement à chaud est disponible et l’essayer !
  • Lors de l’utilisation de Visual Studio 2022 sans le débogueur (par exemple, en utilisant CTRL-F5 pour démarrer l’application), Hot Reload est disponible pour la plupart des types d’applications .NET 6. Dans ce scénario, les applications ne ciblant pas .NET 6+ (autrement dit, elles ciblent .NET 5 ou inférieur) ne prennent pas en charge le scénario « aucun débogueur » et doivent utiliser le débogueur pour obtenir la prise en charge du rechargement à chaud.
  • Lors de l’utilisation de Visual Studio 2022 avec une application .NET 6+, la plupart des scénarios sont pris en charge. Cette prise en charge n’est pas limitée à la nouvelle fonctionnalité « aucun débogueur » mentionnée précédemment. Il inclut également d’autres nouvelles fonctionnalités, telles que la prise en charge du rechargement à chaud des projets Blazor et, plus généralement, la modification de fichiers Razor dans les applications ASP.NET Core et le rechargement à chaud CSS. L’utilisation de Visual Studio 2022 et d’applications qui ciblent .NET 6 ensemble vous offre l’expérience de rechargement à chaud la plus puissante.

Le tableau suivant présente la version minimale de .NET requise pour prendre en charge le rechargement à chaud .NET avec le débogueur attaché (F5) et sans le débogueur attaché (Ctrl+F5), en fonction du type de projet. Visual Studio 2022 version 17.8 ou ultérieure est requis.

Type d’application F5 Ctrl+F5 Prise en charge de MetadataUpdateHandler
Console .NET 6 .NET 6
Exécution sur Linux/macOS
(Docker et WSL)
.NET 8 .NET 6 .NET 8
Fonctionne sur Arm64 .NET 7 .NET 7 .NET 7
WPF (Windows Presentation Foundation) .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Serveur Blazor .NET 6 .NET 6 .NET 6
WebAssembly Blazor .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Les types de modifications que vous pouvez effectuer avec le rechargement à chaud sont déterminés par le runtime et la version du compilateur, et non par la méthode utilisée pour démarrer l’application (F5 ou Ctrl+F5).

Dans les sections suivantes, nous fournissons des détails supplémentaires.

Support pour les applications .NET Framework

Lorsque vous utilisez Visual Studio 2022 et démarrez votre application avec le débogueur, l’expérience de rechargement à chaud de base fonctionne avec la plupart des types d’applications et de versions du framework .NET. Cette prise en charge inclut .NET Framework, .NET Core et .NET 5+ (pour C# et Visual Basic, le cas échéant). Dans ce scénario, si vous utilisez le débogueur, vous devez supposer que le rechargement à chaud est disponible et l’essayer !

Prise en charge des applications C++

Lorsque vous utilisez Visual Studio 2022 et démarrez votre application avec le débogueur, vous pouvez recharger à chaud une application C++ native lors de l’exécution sous le débogueur (F5) à l’aide du bouton rechargement à chaud. Le rechargement à chaud est également pris en charge pour les applications créées à l’aide de projets CMake et OpenFolder.

Pour que votre projet prend en charge le rechargement à chaud, vous avez besoin des options suivantes :

  • Projet > Propriétés >C/C++ > Général >Format des informations de débogage doit être défini sur « Programmer la base de données pour Modifier et Continuer /ZI »
  • Projet > Propriétés > Éditeur de liens > Général >Activer la liaison incrémentielle doit être défini sur « Oui /INCREMENTAL »

Pour les modifications de code C++ prises en charge, voir .

Visual Studio 2022 avec une application .NET ou .NET Framework, lors de l’utilisation du débogueur

Lorsque vous utilisez Visual Studio 2022 et démarrez l’application avec le débogueur, le rechargement à chaud fonctionne avec la plupart des infrastructures d’application.

Partout où vous disposez de .NET et que vous utilisez le débogueur managé de Visual Studio, vous devriez obtenir une prise en charge de base pour le Hot Reload. Cela signifie que même les projets tels qu’Azure Functions fonctionnent très bien dans ce scénario.

Remarque

Par défaut, certains projets utilisent le débogage en mode mixte, qui ne prend pas en charge le Rechargement à chaud. Vous pouvez modifier cela dans les paramètres du projet, en définissant Projet > Propriétés > Débogage > Profils de lancement de débogage > Activer le débogage du code natif sur False.

Visual Studio 2022 avec une application .NET, mais pas utilisant le débogueur

Le Rechargement à chaud est disponible sans le débogueur lorsque vous ciblez la plupart des types d’applications .NET 6+.

Cette fonctionnalité est exclusive à .NET 6+. Ces applications ne ciblant pas .NET 6+ (autrement dit, elles ciblent .NET 5 ou inférieur) ne prennent pas en charge le scénario « aucun débogueur » et doivent utiliser le débogueur pour accéder aux fonctionnalités de rechargement à chaud.

En outre, tous les types de projets ne prennent actuellement pas en charge le scénario « aucun débogueur », consultez prise en charge des applications .NET.

Visual Studio 2022 avec une application .NET 6+

Si vous utilisez Visual Studio 2022 et que vous travaillez sur des applications qui ciblent .NET 6+, vous bénéficiez des avantages de l’expérience de rechargement à chaud la plus polie et compatible.

Pris en charge dans ce scénario :

  • Applications Blazor (Server et WebAssembly)
  • Modification des fichiers Razor dans Blazor et les sites web ASP.NET Core standard
  • Rechargement à chaud CSS
  • Rechargement à chaud XAML
  • Prise en charge du rechargement à chaud lors de l’exécution d’applications sans le débogueur (comme décrit plus en détail précédemment)

Si vous ciblez .NET 6+, vous continuez à obtenir des améliorations dans les mises à jour à venir de Visual Studio 2022 et la bande de fonctionnalités .NET et les versions majeures.

Scénarios ASP.NET principaux pris en charge

L’expérience de rechargement à chaud de base est prise en charge pour de nombreux scénarios ASP.NET. La fonctionnalité la plus largement disponible est la possibilité de modifier le code-behind et d’autres fichiers de classe .NET pour la plupart des types d’applications web. Cette fonctionnalité fonctionne lors de l’utilisation du débogueur Visual Studio et est présente partout où le rechargement à chaud était précédemment disponible. Pour une aide plus spécifique, consultez Prise en charge du Rechargement à chaud .NET pour ASP.NET Core.

Pour les développeurs ASP.NET Core qui ciblent .NET 6+, il existe des fonctionnalités supplémentaires non disponibles pour les versions antérieures de .NET. Ces fonctionnalités sont les suivantes :

  • CSHTML : Modifier un fichier CSHTML Razor permet de nombreux types de modifications.
  • Rafraîchissement du navigateur : La modification d’un fichier Razor met à jour automatiquement les changements dans votre navigateur web lors du débogage. Cette fonctionnalité était auparavant disponible uniquement lors du démarrage de l’application sans le débogueur.
  • Rechargement à chaud CSS : vous pouvez modifier les fichiers CSS pendant l’exécution de l’application, et les modifications sont appliquées immédiatement à l’application en cours d’exécution au fur et à mesure que vous les saisissez.
  • Aucun débogueur : Vous bénéficiez d’une prise en charge du rechargement à chaud lors de l’utilisation de Visual Studio pour démarrer votre application web sans le débogueur (CTRL-F5).

Modifications prises en charge pour .NET

L’expérience de rechargement à chaud .NET est alimentée par le débogueur et le compilateur C# (Roslyn). les modifications prises en charge par Roslyn et modifications de code prises en charge (C# et VB) répertorier les types de modifications actuellement prises en charge et les améliorations futures potentielles.

Modifications du .NET Framework prises en charge

L'expérience Hot Reload de .NET repose sur le débogueur et le compilateur C#. Les modifications de code prises en charge (C# et VB) répertorient les types de modifications actuellement pris en charge et les améliorations futures potentielles.

Projets .NET et .NET Framework non pris en charge

Le rechargement à chaud n’est pas disponible dans certaines configurations de projet :

  • Si vous utilisez Visual Studio sans le débogueur, le rechargement à chaud fonctionne uniquement pour les applications .NET ciblant .NET 6+.
  • Si vous utilisez le débogueur Visual Studio pour exécuter votre application, mais que vous avez désactivé Enable Hot Reload and Edit and Continue when debugging dans les paramètres, le rechargement à chaud n’est pas pris en charge.
  • Les configurations de version ou de build personnalisé ne sont pas prises en charge. Votre projet doit utiliser la configuration de build Debug.
  • Si vous ciblez un projet F# ou .NET Native.
  • Certaines optimisations de démarrage ou de compilation ne sont pas prises en charge dans le rechargement à chaud .NET. Par exemple, si le profil de débogage de votre projet est configuré des manières suivantes, le Rechargement à chaud .NET n’est pas pris en charge :
    • Le découpage est activé pour votre projet. Par exemple, elle n’est pas prise en charge si PublishTrimmed a la valeur True dans votre fichier projet pour le profil de débogage.
    • ReadyToRun est activé pour votre projet. Par exemple, elle n’est pas prise en charge si PublishReadyToRun a la valeur True dans votre fichier projet pour le profil de débogage.

Pour plus d’informations, consultez scénarios non pris en charge.

Rechargement à chaud non pris en charge pour F#

Rechargement à chaud et Modifier et continuer ne sont pas pris en charge lorsque vous déboguez du code F#. Les modifications du code F# sont possibles pendant une session de débogage, mais elles doivent être évitées. Les modifications de code ne sont pas appliquées pendant la session de débogage. Par conséquent, toutes les modifications apportées au code F# pendant que vous déboguez entraînent le code source qui ne correspond pas au code en cours de débogage.

Configurer le Rechargement à chaud

Pour activer, désactiver ou configurer le rechargement à chaud, consultez Configurer Modifier et continuer.

Message d’avertissement

Si la boîte de dialogue suivante s’affiche, le rechargement à chaud ne peut pas appliquer les modifications actuelles sans redémarrer. Vous pouvez choisir de reconstruire l’application et d’appliquer des modifications (redémarrer) ou de continuer la modification. Tout état de l’application est perdu en cas de re-génération. Si vous continuez à modifier, d'autres changements ou corrections pourraient permettre à Hot Reload de fonctionner à nouveau.

capture d’écran Capture d’écran de la boîte de dialogue Appliquer les modifications

Si vous sélectionnez l'option Toujours reconstruire lorsque les modifications ne peuvent pas être appliquées dans la boîte de dialogue, vous ne verrez plus la boîte de dialogue de nouveau dans la session Visual Studio en cours, et Visual Studio reconstruira et rechargera automatiquement au lieu d’afficher la boîte de dialogue.

Dépannage

Il est vivement recommandé de vérifier la fenêtre de sortie de rechargement à chaud pour obtenir des informations de diagnostic détaillées sur la session de rechargement à chaud.

Si vous utilisez la compression de réponse sur .NET Core, consultez les informations sur la compression de réponse .