Compartilhar via


A configuração padrão de EnableDynamicNativeInstrumentation para cobertura de código é false.

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

Versão introduzida

GA do .NET 10

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 na 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 opção <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> é definida por padrão a partir de dotnet test e vstest. Se você definir explicitamente a opção em um arquivo de runsettings , ela não será substituída.

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

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

Tipo de mudança disruptiva

Essa alteração é uma mudança comportamental.

Motivo da alteração

A instrumentação nativa dinâmica foi habilitada por padrão para manter a compatibilidade com versões anteriores em dotnet test. No entanto, sua maneira de injetar DLLs no processo não é padrão. Com as alterações de proteção de segurança no runtime do .NET 10, ele não consegue encontrar a DLL vinculada, fazendo com que o processo falhe com o erro. O erro pode não estar 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á desabilitada por padrão por dotnet-coverage, que é uma maneira alternativa de coletar cobertura de código com as mesmas ferramentas subjacentes. Ele também está desabilitado por padrão para soluções no Visual Studio que não têm projetos nativos.

Se você coletar cobertura sobre soluções que não têm nenhum componente nativo, você não deverá ser afetado. No entanto, você pode observar um melhor desempenho ao coletar cobertura.

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

  • Configurar seus projetos para usar a 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 arquivo runsettings .
    • Opte globalmente por sair desse novo padrão definindo a variável de VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 ambiente.

    Da mesma forma, ao coletar cobertura de código com vstest.console, o VSTest versão 18.0.1 e mais recente é necessário para coletar com êxito a cobertura nativa dinâmica em sistemas que têm o SDK do .NET 10 instalado.

APIs afetadas

Nenhum.