Kodtäckning EnableDynamicNativeInstrumentation är som standard falskt

Om du kör dotnet test --collect:"Code Coverage" nu inaktiveras dynamisk intern instrumentering som standard. Den här ändringen påverkar hur kodtäckning samlas in från inbyggd kod. Det påverkar inte hur kodtäckning samlas in från hanterad kod.

Version lanserad

.NET 10 GA

Tidigare beteende

Tidigare aktiverades dynamisk intern instrumentering som standard och använde en reserv för inbyggda moduler när statiska inbyggda instrumentation inte kunde användas. Det här beteendet beskrivs i statisk och dynamisk intern instrumentation.

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

Nytt beteende

Från och med .NET 10 inaktiveras dynamisk intern instrumentation som standard. Alternativet <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> anges som standard från dotnet test och vstest. Om du uttryckligen anger alternativet i en runsettings-fil åsidosättas det inte.

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

Du kan återaktivera dynamisk intern instrumentering genom att ange <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> i filen runsettings . Men när du gör det kan det misslyckas med "Programmet kan inte fortsätta eftersom covrun64.dll inte hittades". Det här felet kan också inträffa i en 32-bitarsprocess covrun32.dll.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Dynamisk intern instrumentering aktiverades som standard för att upprätthålla bakåtkompatibilitet i dotnet test. Dess sätt att mata in DLL:er i processen är dock inte standard. Med säkerhetshärdningsändringar i .NET 10-körningen går det inte att hitta den länkade DLL:en, vilket gör att processen kraschar med fel. Felet kanske inte visas i icke-interaktiva sessioner eller på kommandoraden, men processen kraschar.

Dynamisk intern instrumentering är redan inaktiverad som standard som dotnet-coverage, vilket är ett alternativt sätt att samla in kodtäckning med samma underliggande verktyg. Den är också inaktiverad som standard för lösningar i Visual Studio som inte har interna projekt.

Om du samlar in täckning för lösningar som inte har några inbyggda komponenter bör du inte påverkas. Du kan dock observera ökad prestanda när du samlar in täckning.

Om du samlar in täckning för lösningar som innehåller inbyggda komponenter, till exempel C++-projekt, har du följande alternativ:

  • Konfigurera dina projekt för att använda statisk inbyggd instrumentering

    OR

  • Uppdatera till Microsoft.CodeCoverage 18.0.1 och aktivera dynamisk intern instrumentation:

    • Lägg till inställningen <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> i din runsettings-fil .
    • Avregistrera dig globalt från den här nya standardinställningen genom att VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 ange miljövariabeln.

    När du samlar in kodtäckning med vstest.console behöver du VSTest version 18.0.1 eller senare för att lyckas samla in dynamisk native-täckning på system där .NET 10 SDK är installerat.

Berörda API:er

Ingen.