Freigeben über


Die Codeabdeckung "EnableDynamicNativeInstrumentation" hat standardmäßig den Wert "false".

Durch das Ausführen von dotnet test --collect:"Code Coverage" wird die dynamische native Instrumentierung jetzt standardmäßig deaktiviert. Diese Änderung wirkt sich auf die Erfassung der Codeabdeckung aus nativem Code aus. Es wirkt sich nicht darauf aus, wie die Codeabdeckung aus verwaltetem Code erfasst wird.

Eingeführt in Version

.NET 10 GA

Vorheriges Verhalten

Zuvor wurde die dynamische systemeigene Instrumentierung standardmäßig aktiviert und ein Fallback für systemeigene Module verwendet, wenn statische systemeigene Instrumentierung nicht verwendet werden konnte. Dieses Verhalten wird in statischer und dynamischer systemeigener Instrumentierung beschrieben.

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

Neues Verhalten

Ab .NET 10 ist die dynamische systemeigene Instrumentierung standardmäßig deaktiviert. Die <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> Option wird standardmäßig von dotnet test und vstest eingestellt. Wenn Sie die Option in einer Runsettings-Datei explizit festlegen, wird sie nicht überschrieben.

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

Sie können die dynamische Native-Instrumentierung erneut aktivieren, indem Sie <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> in Ihrer runsettings-Datei festlegen. Wenn Sie dies tun, kann es jedoch möglicherweise mit "Die Codeausführung kann nicht fortgesetzt werden, da covrun64.dll nicht gefunden wurde." fehlschlagen. Dieser Fehler kann auch bei einem 32-Bit-Prozess auftreten.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für Änderung

Die dynamische systemeigene Instrumentierung wurde standardmäßig aktiviert, um die Abwärtskompatibilität aufrechtzuerhalten.dotnet test Die Art und Weise, DLLs in den Prozess einzufügen, ist jedoch nicht standard. Bei Sicherheitshärtungsänderungen in der .NET 10-Laufzeit kann die verknüpfte DLL nicht gefunden werden, was dazu führt, dass der Prozess mit Einem Fehler abstürzt. Der Fehler ist in nicht interaktiven Sitzungen oder in der Befehlszeile möglicherweise nicht sichtbar, aber der Prozess stürzt ab.

Dynamische systemeigene Instrumentierung ist standardmäßig bereits deaktiviert dotnet-coverage, was eine alternative Möglichkeit zum Sammeln der Codeabdeckung mit den gleichen zugrunde liegenden Tools ist. Sie ist auch standardmäßig für Lösungen in Visual Studio deaktiviert, die nicht über systemeigene Projekte verfügen.

Wenn Sie eine Erfassung für Lösungen sammeln, die keine nativen Komponenten enthalten, sollten Sie nicht betroffen sein. Möglicherweise stellen Sie jedoch eine verbesserte Leistung fest, wenn Sie die Abdeckung erfassen.

Wenn Sie eine Abdeckung für Lösungen sammeln, die systemeigene Komponenten enthalten, z. B. C++-Projekte, haben Sie die folgenden Optionen:

  • Konfigurieren Sie Ihre Projekte für die Verwendung der statischen nativen Instrumentierung.

    ODER

  • Aktualisieren Sie auf Microsoft.CodeCoverage 18.0.1, und aktivieren Sie dynamische systemeigene Instrumentierung:

    • Fügen Sie die Einstellung <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> zu Ihrer Runsettings-Datei hinzu.
    • Deaktivieren Sie diese neue Standardeinstellung global, indem Sie die VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 Umgebungsvariable festlegen.

    Ebenso ist beim Sammeln der Codeabdeckung mit vstest.console VSTest in Version 18.0.1 und höher erforderlich, um erfolgreich dynamische Native-Abdeckung auf Systemen zu erfassen, auf denen das .NET 10 SDK installiert ist.

Betroffene APIs

Keiner.