Partilhar via


Cobertura de código: EnableDynamicNativeInstrumentation por padrão é false

A execução dotnet test --collect:"Code Coverage" agora desativa a instrumentação nativa dinâmica por padrão. Essa alteração afeta como a cobertura de código é coletada do código nativo. Isso não afeta como a cobertura de código é coletada do código gerenciado.

Versão introduzida

.NET 10 GA

Comportamento anterior

Anteriormente, a instrumentação nativa dinâmica era habilitada por padrão e usava um fallback para módulos nativos quando a instrumentação nativa estática não podia ser usada. Esse comportamento é descrito em Instrumentação nativa estática e dinâmica.

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

Novo comportamento

A partir do .NET 10, a instrumentação nativa dinâmica é desabilitada por padrão. A <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> opção é definida por padrão de dotnet test e vstest. Se você definir explicitamente a opção em um arquivo runsettings , ela não será substituída.

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

Você pode reativar a instrumentação nativa dinâmica definindo <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> em seu arquivo runsettings . No entanto, quando você fizer isso, ele pode falhar com "A execução de código não pode continuar porque covrun64.dll não foi encontrado." Este erro também pode acontecer em covrun32.dll um processo de 32 bits.

Tipo de mudança disruptiva

Esta alteração é de natureza comportamental .

Motivo da mudança

A instrumentação nativa dinâmica foi habilitada por padrão para manter a compatibilidade com versões anteriores no dotnet test. No entanto, sua maneira de injetar DLLs no processo não é padrão. Com alterações de proteção de segurança no tempo de execução do .NET 10, ele não consegue encontrar a DLL vinculada, fazendo com que o processo falhe com erro. O erro pode não ser visível em sessões não interativas ou na linha de comando, mas o processo falha.

A instrumentação nativa dinâmica já está desativada por predefinição pelo dotnet-coverage, que é uma maneira alternativa de recolher cobertura de código utilizando os mesmos instrumentos básicos. Ele também é desabilitado por padrão para soluções no Visual Studio que não têm projetos nativos.

Caso recolha cobertura em soluções que não tenham componentes nativos, não será afetado. No entanto, você pode observar um maior desempenho ao coletar coberturas.

Se você coletar cobertura em soluções que incluem componentes nativos, como projetos C++, terá as seguintes opções:

  • Configure seus projetos para usar instrumentação nativa estática

    OR

  • Atualize para Microsoft.CodeCoverage 18.0.1 e habilite a instrumentação nativa dinâmica:

    • Adicione a configuração <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> ao seu arquivo runsettings .
    • Desative globalmente esse novo padrão definindo a VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 variável de ambiente.

    Da mesma forma, ao recolher cobertura de código com vstest.console, o VSTest versão 18.0.1 e versões mais recentes são necessários para recolher com êxito a cobertura dinâmica nativa em sistemas que têm o SDK .NET 10 instalado.

APIs afetadas

Nenhum.