É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 de Hot Reload est de vous éviter autant de redémarrages d'applications possibles entre deux modifications, vous rendant plus productif en réduisant le temps passé à attendre que les applications se régénèrent, redémarrent et retournent à l'emplacement précédent où vous étiez dans l'application elle-même, etc.
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
Ouvrez un projet en fonction d’un type d’application pris en charge. Consultez les applications prises en charge par .NET et C++ .
Démarrez l’application avec le débogueur attaché en utilisant F5 ou, si c’est possible, Ctrl+F5.
Ouvrez un fichier de code et modifiez le code.
Appliquez les modifications de code à l’aide du bouton Hot Reload, ou appuyez sur ALT+F10.
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é. 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 ci-dessus. 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 montre quels projets 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 requise 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 |
Fonctionne 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 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.
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, 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 à la fonctionnalité 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 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.
- 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 tapez.
- 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.
Projets .NET 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ée 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.
- Le découpage est activé pour votre projet. Par exemple, elle n’est pas prise en charge si
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 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 l’état de l’application est perdu en cas de regénération. Si vous continuez à modifier, d'autres changements ou corrections pourraient permettre à Hot Reload de fonctionner à nouveau.
capture d’écran
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 Sortie Rechargement à chaud pour obtenir des informations de diagnostic détaillées sur la session Rechargement à chaud.
Si vous utilisez la compression de réponse sur .NET Core, consultez les informations sur la compression de réponse .