Udostępnij przez


Pokrycie kodu EnableDynamicNativeInstrumentation domyślnie ma wartość false

Uruchamianie dotnet test --collect:"Code Coverage" powoduje teraz domyślne wyłączenie dynamicznej instrumentacji natywnej. Ta zmiana wpływa na sposób zbierania pokrycia kodu z kodu natywnego. Nie ma to wpływu na sposób zbierania pokrycia kodu z kodu zarządzanego.

Wersja wprowadzona

Ogólna dostępność platformy .NET 10

Poprzednie zachowanie

Wcześniej instrumentacja dynamiczna natywna była domyślnie włączona i używała alternatywy dla modułów natywnych w przypadku, gdy nie można było zastosować statycznej instrumentacji natywnej. To zachowanie zostało opisane w temacie Instrumentacja statyczna i dynamiczna natywna.

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

Nowe zachowanie

Począwszy od platformy .NET 10, instrumentacja dynamiczna natywna jest domyślnie wyłączona. Opcja jest domyślnie ustawiona <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> z dotnet test i vstest. Jeśli jawnie ustawisz opcję w pliku runsettings , nie zostanie on zastąpiony.

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

Możesz ponownie włączyć dynamiczną natywną instrumentację, ustawiając w pliku <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation>runsettings. Jednak po wykonaniu tej czynności może zakończyć się niepowodzeniem z komunikatem "Nie można kontynuować wykonywania kodu, ponieważ nie znaleziono covrun64.dll". Ten błąd może również wystąpić covrun32.dll w procesie 32-bitowym.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Włączono domyślnie dynamiczną instrumentację natywną, aby zachować kompatybilność wsteczną w programie dotnet test. Jednak sposób wstrzykiwania bibliotek DLL do procesu nie jest standardowy. W przypadku zmiany zabezpieczeń w środowisku uruchomieniowym platformy .NET 10 nie można odnaleźć połączonej biblioteki DLL, co powoduje awarię procesu z powodu błędu. Błąd może nie być widoczny w sesjach nieinterakcyjnych lub w wierszu polecenia, ale proces ulega awarii.

Instrumentacja dynamiczna natywna jest już domyślnie wyłączona przez dotnet-coverage, co jest alternatywnym sposobem zbierania pokrycia kodu przy użyciu tych samych narzędzi podstawowych. Jest ona również domyślnie wyłączona w przypadku rozwiązań w programie Visual Studio, które nie mają projektów natywnych.

Jeśli raportujesz rozwiązania, które nie mają żadnych składników natywnych, nie powinno to mieć wpływu. Jednak podczas analizowania pokrycia można zaobserwować zwiększoną wydajność.

W przypadku zbierania pokrycia rozwiązań, które obejmują składniki natywne, takie jak projekty języka C++, dostępne są następujące opcje:

  • Konfigurowanie projektów tak, aby korzystały ze statycznej instrumentacji natywnej

    OR

  • Zaktualizuj do wersji Microsoft.CodeCoverage 18.0.1 i włącz dynamiczną rodzimą instrumentację.

    • Dodaj ustawienie <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> do pliku runsettings .
    • Aby globalnie zrezygnować z tego nowego domyślnego ustawienia, należy ustawić zmienną środowiskową VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1.

    Podobnie, w przypadku zbierania pokrycia kodu za pomocą vstest.console programu VSTest, wersja 18.0.1 i nowsza jest wymagana do pomyślnego zebrania dynamicznego pokrycia natywnego w systemach z zainstalowanym zestawem SDK .NET 10.

Interfejsy API, których dotyczy problem

Żaden.