Modifications de code prises en charge (C# et Visual Basic)
Le mécanisme de rechargement à chaud, précédemment appelé Edit and Continue, gère la plupart des types de modifications de code dans les corps de méthode. Toutefois, la plupart des modifications en dehors des corps de méthode et quelques modifications dans les corps de méthode ne peuvent pas être appliquées pendant le débogage. Pour appliquer ces modifications non prises en charge, vous devez arrêter le débogage et redémarrer avec une nouvelle version du code.
Le mécanisme Edit and Continue gère la plupart des types de modifications de code dans les corps de méthode. Toutefois, la plupart des modifications en dehors des corps de méthode et quelques modifications dans les corps de méthode ne peuvent pas être appliquées pendant le débogage. Pour appliquer ces modifications non prises en charge, vous devez arrêter le débogage et redémarrer avec une nouvelle version 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 ou fonctionnalité de langue | Opération de modification prise en charge | Limitations |
---|---|---|
Catégories | Ajouter des méthodes, des champs, des constructeurs, etc. | 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 ou fonctionnalité de langage | Opération de modification prise en charge | Limitations |
---|---|---|
Types | Ajouter des méthodes, des champs, des constructeurs, etc. | Oui |
Itérateurs | 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 |
Remarque
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 Edit et Continue. Pour obtenir les informations les plus récentes, consultez la page Modifications prises en charge par Enc .
Améliorations apportées à .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 dépassent ce qui était initialement possible dans les versions antérieures de Visual Studio. Ces améliorations sont disponibles à la fois pour le rechargement à chaud et les expériences Modifier et Continuer.
L'expérience de rechargement à chaud de .NET 6+ repose sur le mécanisme Modifier et Continuer ainsi que sur Roslyn. Modifications prises en charge répertorie les types de modifications actuellement pris 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 au 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.
La déclaration actuelle apparaît sur un arrière-plan jaune dans la fenêtre source. D’autres instructions actives apparaissent sur un arrière-plan ombré et sont en mode 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 ou fonctionnalité linguistique 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 En cas d’erreur ou Reprendre
- Modifier un membre contenant une clause de requête Aggregate, Group By, Simple Join ou Group Join LINQMéthode - Modifier les signatures
- Rendre une méthode abstraite devenir nonabstract 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 Blocs catch Modifier lorsqu’elle contient une instruction active Blocs try-catch-finally Modifier lorsqu’elle 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 inférieur (voir détails) Itérateurs Modifier un itérateur dans un projet ciblant .NET Framework 4 et versions antérieures (voir détails) Élément ou fonctionnalité de langue Opération de modification non prise en charge Tous les éléments de code Changement de nom 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 En cas d’erreur ou Reprendre
- Modifier un membre contenant une clause de requête Aggregate, Group By, Simple Join ou Group Join LINQMéthode - Modifier les signatures
- Rendre une méthode abstraite devenir nonabstract 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 Blocs catch Modifier lorsqu’elle contient une instruction active Blocs try-catch-finally Modifier lorsqu’elle 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 inférieur (voir détails) Itérateurs Modifier un itérateur dans un projet ciblant .NET Framework 4 et versions antérieures (voir détails)
Code non sécurisé
Les modifications apportées au code non sécurisé ont les mêmes limitations que les modifications apportées au code sécurisé, avec une restriction supplémentaire : Modifier et Continuer ne prend pas en charge les modifications apportées au code non sécurisé qui se termine 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 .NET Framework 4.6 ou des versions ultérieures sur bureau (le .NET Framework est une version uniquement pour bureau)
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 le lancement du 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 Edit and Continue, envisagez de définir la version uniquement dans les builds Release (ou CI) et de conserver la version dans les builds Debug.
Débogage de code optimisé.
Débogage SQL.
Débogage d'un fichier dump.
Débogage d’une application runtime incorporée.
Le débogage d'une ancienne version de votre code après qu'une nouvelle version a échoué à se compiler en raison d'erreurs de compilation.