Sdílet prostřednictvím


Výchozí hodnota pokrytí kódu EnableDynamicNativeInstrumentation je false

Spuštění dotnet test --collect:"Code Coverage" teď ve výchozím nastavení zakáže dynamickou nativní instrumentaci. Tato změna ovlivňuje způsob shromažďování pokrytí kódu z nativního kódu. Nemá vliv na shromažďování pokrytí kódu ze spravovaného kódu.

Verze byla představena

Obecná dostupnost .NET 10 GA

Předchozí chování

Dříve byla ve výchozím nastavení povolena dynamická nativní instrumentace a pokud nebylo možné použít statickou nativní instrumentaci, používala se jako náhrada pro nativní moduly. Toto chování je popsáno ve statické a dynamické nativní instrumentaci.

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

Nové chování

Od verze .NET 10 je ve výchozím nastavení dynamická nativní instrumentace zakázaná. Možnost <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> je standardně nastavena z dotnet test a vstest. Pokud explicitně nastavíte možnost v souboru runsettings , nepřepíše se.

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

Dynamickou nativní instrumentaci můžete znovu povolit nastavením <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> v souboru runsettings . Pokud to ale uděláte, může selhat s chybou "Spuštění kódu nemůže pokračovat, protože covrun64.dll nebyl nalezen.". K této chybě může dojít covrun32.dll také v 32bitovém procesu.

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Dynamická nativní instrumentace byla ve výchozím nastavení povolena pro zachování zpětné kompatibility v dotnet test. Způsob vkládání knihoven DLL do procesu ale není standardní. Při změnách tvrdšího zabezpečení v modulu runtime .NET 10 nelze najít připojenou knihovnu DLL, což způsobí pád procesu s chybou. Chyba nemusí být viditelná v neinteraktivních relacích nebo v příkazovém řádku, ale proces se chybově ukončí.

Dynamické nativní instrumentace je dotnet-coverage ve výchozím nastavení zakázána, což je alternativní způsob, jak sbírat krytí kódu pomocí stejných základních nástrojů. Ve výchozím nastavení je také zakázaná pro řešení v sadě Visual Studio, která nemají nativní projekty.

Pokud získáte pokrytí u řešení, která nemají žádné nativní komponenty, nemělo by vás to ovlivnit. Při shromažďování pokrytí ale můžete zaznamenat vyšší výkon.

Pokud shromáždíte pokrytí řešení, která zahrnují nativní komponenty, jako jsou projekty C++, máte následující možnosti:

  • Konfigurace projektů tak, aby používaly statickou nativní instrumentaci

    OR

  • Aktualizujte na Microsoft.CodeCoverage 18.0.1 a povolte dynamickou nativní instrumentaci:

    • Přidejte nastavení <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> do souboru runsettings .
    • Provedení globálního odhlášení z tohoto nového výchozího nastavení pomocí nastavení proměnné prostředí VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1

    Podobně při shromažďování pokrytí kódu pomocí vstest.console je nástroj VSTest verze 18.0.1 a novější vyžadován k úspěšnému shromažďování dynamického nativního pokrytí na systémech s nainstalovanou sadou SDK .NET 10.

Ovlivněná rozhraní API

Žádné.