Modifications de code prises en charge (C# et Visual Basic)
Le mécanisme de Rechargement à chaud, précédemment appelé Modifier et continuer, gère la plupart des types de modifications de code dans les corps de méthode. Toutefois, la plupart des modifications en dehors du corps des méthodes et quelques autres à l’intérieur ne peuvent pas s’appliquer pendant le débogage. Pour appliquer ces modifications non prises en charge, vous devez arrêter le débogage et redémarrer avec une version nouvelle du code.
Les mécanismes Modifier et Continuer gèrent la plupart des types de modifications du code dans le corps des méthodes. Toutefois, la plupart des modifications en dehors du corps des méthodes et quelques autres à l’intérieur ne peuvent pas s’appliquer pendant le débogage. Pour appliquer ces modifications non prises en charge, vous devez arrêter le débogage et redémarrer avec une version nouvelle du code.
Modifications prises en charge pour coder
Le tableau suivant montre les modifications qui peuvent être apportées au code C# et Visual Basic pendant une session de débogage sans redémarrer la session.
Élément/fonctionnalité de langage | Opération de modification prise en charge | Limites |
---|---|---|
Types | Ajouter des méthodes, des champs, des constructeurs, et bien plus encore | Oui |
Iterators | Ajouter ou modifier | Non |
expressions async/await | Ajouter ou modifier | Oui |
Objets dynamiques | Ajouter ou modifier | Non |
expressions lambda | Ajouter ou modifier | Oui |
expressions LINQ | Ajouter ou modifier | Identique aux expressions lambda |
Génériques | Ajouter ou modifier | Oui |
Élément/fonctionnalité de langage | Opération de modification prise en charge | Limites |
---|---|---|
Types | Ajouter des méthodes, des champs, des constructeurs, et bien plus encore | Oui |
Iterators | Ajouter ou modifier | Non |
expressions async/await | Ajouter ou modifier | Oui |
Objets dynamiques | Ajouter ou modifier | Non |
expressions lambda | Ajouter ou modifier | Oui |
expressions LINQ | Ajouter ou modifier | Identique aux expressions lambda |
Notes
Les fonctionnalités de langage plus récentes telles que l’interpolation de chaîne et les opérateurs conditionnels Null sont généralement prises en charge par Modifier et continuer. Pour obtenir les informations les plus récentes, consultez la page Modifications prises en charge par Enc .
Améliorations de .NET 6+
Les améliorations apportées à .NET 6+ et Visual Studio 2022 et versions ultérieures incluent la prise en charge d’autres types de modifications qui vont au-delà de ce qui était initialement possible dans les versions antérieures de Visual Studio. Ces améliorations sont disponibles à la fois pour les expériences Rechargement à chaud et Modifier et continuer.
L’expérience de Rechargement à chaud .NET 6+ est alimentée par le mécanisme Modifier et continuer et Roslyn. Les modifications prises en charge répertorient les types de modifications actuellement prises en charge par Roslyn et les améliorations futures potentielles.
Modifications non prises en charge pour coder
Les modifications suivantes ne peuvent pas être appliquées à du code C# et Visual Basic pendant une session de débogage.
Modifications à l'instruction en cours ou à toute autre instruction active.
Une instruction active est une instruction dans une fonction de la pile des appels qui a été appelée pour accéder à l’instruction actuelle.
L'instruction en cours s’affiche sur un arrière-plan jaune dans la fenêtre source. D'autres instructions actives s’affichent sur un arrière-plan grisé et sont en lecture seule. Ces couleurs par défaut peuvent être modifiées dans la boîte de dialogue Options.
Toute modification non prise en charge du code par élément de langage, comme indiqué dans le tableau suivant.
Élément/fonctionnalité de langage Opération de modification non prise en charge Tous les éléments de code Renommage Espaces de noms Ajouter Espaces de noms, types, membres Supprimer Interfaces Modifier Types Ajouter un membre abstrait ou virtuel, ajouter un remplacement (voir les détails) Types Ajouter un destructeur Membres - Modifier un membre référençant un type d’interopérabilité incorporé
- Modifier un membre statique une fois qu’il a déjà été accédé en exécutant du codeMembres (Visual Basic) - Modifier un membre avec l’instruction On Error ou Resume
- Modifier un membre contenant une clause de requête Aggregate, Group By, Simple Join ou Group Join LINQMéthodes - Modifier les signatures
- Faire en sorte qu’une méthode abstraite devienne non abstraite en ajoutant un corps de méthode
- Supprimer un corps de méthodeAttributs Ajouter ou modifier Événements ou propriétés Modifier un paramètre de type, un type de base, un type délégué ou un type de retour Opérateurs ou indexeurs Modifier un paramètre de type, un type de base, un type délégué ou un type de retour catch (blocs) Modifier lorsqu’il contient une instruction active blocs try-catch-finally Modifier lorsqu’il contient une instruction active instructions Using Ajouter méthodes asynchrones/lambdas Modifier une méthode asynchrone/lambda dans un projet ciblant .NET Framework 4 et versions antérieures (voir les détails) Itérateurs Modifier un itérateur dans un projet ciblant .NET Framework 4 et versions antérieures (voir les détails) Élément/fonctionnalité de langage Opération de modification non prise en charge Tous les éléments de code Renommage Espaces de noms Ajouter Espaces de noms, types, membres Supprimer Génériques Ajouter ou modifier Interfaces Modifier Types Ajouter un membre abstrait ou virtuel, ajouter un remplacement (voir les détails) Types Ajouter un destructeur Membres - Modifier un membre référençant un type d’interopérabilité incorporé
- Modifier un membre statique une fois qu’il a déjà été accédé en exécutant du codeMembres (Visual Basic) - Modifier un membre avec l’instruction On Error ou Resume
- Modifier un membre contenant une clause de requête Aggregate, Group By, Simple Join ou Group Join LINQMéthodes - Modifier les signatures
- Faire en sorte qu’une méthode abstraite devienne non abstraite en ajoutant un corps de méthode
- Supprimer un corps de méthodeAttributs Ajouter ou modifier Événements ou propriétés Modifier un paramètre de type, un type de base, un type délégué ou un type de retour Opérateurs ou indexeurs Modifier un paramètre de type, un type de base, un type délégué ou un type de retour catch (blocs) Modifier lorsqu’il contient une instruction active blocs try-catch-finally Modifier lorsqu’il contient une instruction active instructions Using Ajouter méthodes asynchrones/lambdas Modifier une méthode asynchrone/lambda dans un projet ciblant .NET Framework 4 et versions antérieures (voir les détails) Itérateurs Modifier un itérateur dans un projet ciblant .NET Framework 4 et versions antérieures (voir les détails)
Code unsafe
Les modifications apportées à du code non sécurisé présentent les mêmes restrictions que celles qui portent sur du code sécurisé, avec une restriction supplémentaire : Modifier et continuer ne prend pas en charge les modifications de code non sécurisé dans une méthode qui contient l’opérateur stackalloc
.
Prise en charge des applications
Les applications prises en charge sont les suivantes :
- Applications UWP dans Windows 10 ou Windows 11
- Applications x86 et x64 qui ciblent le bureau .NET Framework 4.6 ou versions ultérieures (le .NET Framework est une version de bureau uniquement)
Pour .NET 6 et versions ultérieures, la modification est prise en charge pour les types de fichiers suivants :
- .cshtml
- .razor
Applications, plateformes et opérations non prises en charge
Les applications ou plateformes non prises en charge sont les suivantes :
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS et Android)
Pour ASP.NET et ASP.NET Core, la modification n’est pas prise en charge pour les types de fichiers suivants :
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Scénarios non pris en charge
Modifier et continuer n’est pas disponible dans les scénarios de débogage suivants :
Débogage en mode mixte (natif/managé).
Débogage sur Arm64 sans cibler .NET 7 ou version ultérieure.
Débogage avec la variable d'environnement COR_ENABLE_PROFILING définie.
Débogage d’une application à l’aide de l’attachement au processus (Déboguer > Attacher au processus) au lieu d’exécuter l’application en choisissant Démarrer dans le menu Déboguer. Si vous souhaitez utiliser Modifier et Continuer lors de l’attachement à un processus, la variable d’environnement COMPLUS_ForceENC doit être définie avant de lancer le processus (
set COMPLUS_ForceENC=1
).Débogage avec des versions d’assembly non déterministes (par exemple, basées sur le temps). Si vous souhaitez utiliser Modifier and Continuer, envisagez de définir la version uniquement dans les builds de Mise en production (ou Intégration continue) et conservez la version dans les builds Déboguer constante.
Débogage de code optimisé.
Débogage SQL.
Débogage d'un fichier dump.
Débogage d'une application runtime incorporée.
Débogage d'une version ancienne de votre code après l'échec de génération d'une nouvelle version en raison d'erreurs de build.