Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
Ação recomendada
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=1variá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.- Adicione a configuração
APIs afetadas
Nenhum.