Partager via


La couverture du code EnableDynamicNativeInstrumentation a la valeur false par défaut

L’exécution dotnet test --collect:"Code Coverage" désactive désormais l’instrumentation native dynamique par défaut. Cette modification affecte la façon dont la couverture du code est collectée à partir du code natif. Elle n’affecte pas la façon dont la couverture du code est collectée à partir du code managé.

Version introduite

.NET 10 GA

Comportement précédent

Auparavant, l’instrumentation native dynamique était activée par défaut et utilisait un secours pour les modules natifs lorsque l’instrumentation native statique n’a pas pu être utilisée. Ce comportement est décrit dans l’instrumentation native statique et dynamique.

dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation was enabled by default

Nouveau comportement

À compter de .NET 10, l’instrumentation native dynamique est désactivée par défaut. L’option <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> est définie par défaut à partir de dotnet test et vstest. Si vous définissez explicitement l’option dans un fichier runsettings , elle n’est pas remplacée.

dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation is now disabled by default

Vous pouvez réactiver l’instrumentation native dynamique en définissant <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> dans votre fichier runsettings. Toutefois, lorsque vous le faites, il peut échouer avec « L’exécution du code ne peut pas continuer, car covrun64.dll n’a pas été trouvé ». Cette erreur peut également se produire covrun32.dll dans un processus 32 bits.

Type de changement cassant

Ce changement est un changement de comportement.

Raison de la modification

L’instrumentation native dynamique a été activée par défaut pour maintenir la rétrocompatibilité en dotnet test. Toutefois, sa façon d’injecter des DLL dans le processus n’est pas standard. Avec le renforcement de la sécurité dans le runtime .NET 10, il ne parvient pas à trouver la DLL liée, ce qui provoque le plantage du processus avec une erreur. L’erreur peut ne pas être visible dans les sessions non interactives ou dans la ligne de commande, mais le processus se bloque.

L’instrumentation native dynamique est déjà désactivée par défaut dotnet-coverage, ce qui constitue une alternative pour collecter la couverture du code à l’aide des mêmes outils sous-jacents. Elle est également désactivée par défaut pour les solutions dans Visual Studio qui n’ont pas de projets natifs.

Si vous collectez une couverture sur les solutions qui n’ont pas de composants natifs, vous ne devez pas être affecté. Toutefois, vous pouvez observer une augmentation des performances lors de la collecte de la couverture.

Si vous collectez une couverture sur les solutions qui incluent des composants natifs, tels que des projets C++, vous disposez des options suivantes :

  • Configurer vos projets pour utiliser l’instrumentation native statique

    OR

  • Effectuez une mise à jour vers Microsoft.CodeCoverage 18.0.1 et activez l’instrumentation native dynamique :

    • Ajoutez le paramètre <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> à votre fichier runsettings .
    • Désactivez globalement cette nouvelle valeur par défaut en définissant la variable d’environnement VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 .

    De même, lors de la collecte de la couverture du code avec vstest.console, la version 18.0.1 ou supérieure de VSTest est nécessaire pour collecter correctement la couverture native dynamique sur les systèmes ayant le SDK .NET 10 installé.

API affectées

Aucun.