Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Zalecana akcja
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.consoleprogramu VSTest, wersja 18.0.1 i nowsza jest wymagana do pomyślnego zebrania dynamicznego pokrycia natywnego w systemach z zainstalowanym zestawem SDK .NET 10.- Dodaj ustawienie
Interfejsy API, których dotyczy problem
Żaden.