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

Depuis Visual Studio 2022, l’expérience Rechargement à chaud dans Visual Studio fonctionne pour les applications .NET managées et C++ natives. Quel que soit le type d’application sur lequel vous travaillez, l’intention du rechargement à chaud est de vous économiser le plus de redémarrages d’application entre les modifications que possible, afin d’améliorer votre productivité en réduisant le temps que vous passez à attendre que les applications soient regénérées, redémarrent, accèdent à nouveau à l’emplacement précédent où vous étiez dans l’application elle-même, etc.

Pour ce faire, vous pouvez modifier les fichiers de code de votre application et 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 une sorte de minuteur, etc.) et observez les modifications immédiatement. Aucune suspension de l’application via des points d’arrêt n’est requise.

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

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

  2. Démarrez l’application avec le débogueur attaché en utilisant F5 ou, si c’est 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 à chaud ou appuyez sur ALT+F10.

    Screenshot of the Hot Reload button.

Pour afficher les modifications apportées à l’interface utilisateur, le code doit être réexécuté. Par exemple, le code qui est déclenché à un intervalle via un minuteur ou le code-behind d’un bouton doit être réexécuté. 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

  • Lors de l’utilisation de Visual Studio 2022 et du démarrage de votre application avec le débogueur, l’expérience de base de rechargement à chaud fonctionne avec la plupart des types d’applications .NET et de versions de framework. Cela 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.
  • Quand vous utilisez Visual Studio 2022 mais pas le débogueur (par exemple en utilisant Ctrl+F5 pour démarrer l’application), le rechargement à chaud est disponible quand vous ciblez la plupart des types d’applications .NET 6. Cela signifie que les applications qui ne ciblent pas .NET 6 (.NET 5 ou version antérieure) 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.
  • Lorsque vous utilisez Visual Studio 2022 avec une application .NET 6, la plupart des scénarios sont pris en charge. Cela ne se limite pas à la nouvelle fonctionnalité « aucun débogueur » mentionnée ci-dessus. Cela inclut également d’autres nouvelles fonctionnalités, telles que la prise en charge des projets Blazor de rechargement à chaud et, plus généralement, la modification de fichiers Razor dans n’importe quelle application ASP.NET Core et le rechargement à chaud CSS. L’utilisation simultanée de Visual Studio 2022 et des applications qui ciblent .NET 6 vous fournira l’expérience la plus puissante de Rechargement à chaud.

Le tableau suivant indique les projets qui prennent en charge le Rechargement à chaud .NET avec le débogueur attaché (F5) et sans le débogueur attaché (Ctrl+F5), en fonction de la version minimale de .NET nécessaire pour la prise en charge dans Visual Studio 2022 (17.8).

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
Exécution sur Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .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 apporter avec le Rechargement à chaud sont déterminés par la version du runtime et du compilateur, et non pas par la méthode que vous avez utilisée pour démarrer l’application (F5 ou Ctrl+F5).

Dans les sections suivantes, nous allons partir du résumé ci-dessus pour en approfondir les détails.

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 des projets CMake et OpenFolder.

Pour que votre projet prenne en charge Rechargement à chaud, vous aurez besoin des éléments suivants :

  • 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 connaître les modifications prises en charge, consultez Modifications de code prises en charge par C++.

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

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

Partout où vous avez .NET et que vous utilisez le débogueur managé Visual Studio, vous devez bénéficier d’une prise en charge de base du rechargement à chaud. Cela signifie que même des projets tels qu’Azure Functions fonctionnent convenablement dans ce scénario.

Remarque

Certains projets utilisent par défaut le débogage en mode mixte, ce qui ne prend pas en charge 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, sans utiliser le débogueur

Rechargement à chaud est disponible sans le débogueur lors du ciblage de la plupart des types d’applications .NET 6+.

Cette fonctionnalité est exclusive à .NET 6+. Ces applications qui ne ciblent pas .NET 6+ (c’est-à-dire .NET 5 ou version antérieure) ne prennent pas en charge le scénario « aucun débogueur » et doivent utiliser le débogueur pour accéder à la fonctionnalité Rechargement à chaud.

Sachez également que 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 Rechargement à chaud la plus soignée et la plus performante.

Les éléments suivants sont 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
  • Recharge à 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 d’obtenir des améliorations dans les prochaines mises à jour de Visual Studio 2022 et dans les versions majeures et la bande de fonctionnalités .NET.

Scénarios ASP.NET Core pris en charge

L’expérience de rechargement à chaud de base est prise en charge dans 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ù Rechargement à chaud était précédemment disponible. Pour obtenir des conseils plus spécifiques, 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 : la modification d’un fichier CSHTML Razor prend en charge de nombreux types de modifications.
  • Actualisation du navigateur : la modification d’un fichier razor actualise automatiquement les modifications 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 tapez.
  • Aucun débogueur : vous obtenez la prise en charge du rechargement à chaud lorsque vous utilisez Visual Studio pour démarrer votre application web sans le débogueur (CTRL-F5).

Modifications .NET prises en charge

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

Projets .NET non pris en charge

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

  • Si vous utilisez Visual Studio sans le débogueur, 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ées 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, il n’est pas pris en charge si PublishTrimmed est défini sur True dans votre fichier projet pour le profil de débogage.
    • ReadyToRun est activé pour votre projet. Par exemple, il n’est pas pris en charge si PublishReadyToRun est défini sur True dans votre fichier projet pour le profil de débogage.

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

Configurer le rechargement à chaud

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

Message d'avertissement

Si vous voyez la boîte de dialogue suivante, le rechargement à chaud ne peut pas appliquer les modifications actuelles sans redémarrer. Vous pouvez choisir de régénérer l’application et d’appliquer des modifications (redémarrer) ou de continuer à modifier. Si vous régénérez, tout l’état de l’application est perdu. Si vous continuez vos modifications, il est possible que des modifications ou des corrections supplémentaires entraînent à nouveau le fonctionnement de Rechargement à chaud.

Screenshot of the apply changes dialog box

Si vous sélectionnez l’option Toujours reconstruire lorsque des modifications ne peuvent être appliquées dans la boîte de dialogue, vous ne verrez plus la boîte de dialogue dans la session Visual Studio actuelle, et Visual Studio régénère et recharge automatiquement au lieu d’afficher la boîte de dialogue.

Résolution des problèmes

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

Si vous utilisez la compression des réponses sur .NET Core, consultez les informations sur la compression des réponses.