Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La ejecución dotnet test --collect:"Code Coverage" ahora deshabilita la instrumentación nativa dinámica de forma predeterminada. Este cambio afecta a cómo se recopila la cobertura de código nativo. No afecta cómo se recopila la cobertura de código desde el código administrado.
Versión introducida
Disponibilidad general de .NET 10
Comportamiento anterior
Anteriormente, la instrumentación nativa dinámica se habilitaba de forma predeterminada y usaba una reserva para los módulos nativos cuando no se podía usar la instrumentación nativa estática. Este comportamiento se describe en Instrumentación nativa estática y dinámica.
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation was enabled by default
Nuevo comportamiento
A partir de .NET 10, la instrumentación nativa dinámica está deshabilitada de forma predeterminada. La <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> opción se establece de forma predeterminada desde dotnet test y vstest. Si establece explícitamente la opción en un archivo runsettings , no se invalida.
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation is now disabled by default
Puede volver a habilitar la instrumentación nativa dinámica estableciendo <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> en el archivo runsettings . Sin embargo, cuando lo hagas, podría fallar con "No se puede continuar la ejecución del código porque no se encontró covrun64.dll." Este error también puede producirse para covrun32.dll en un proceso de 32 bits.
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
La instrumentación dinámica nativa está habilitada de manera predeterminada para mantener la compatibilidad con versiones anteriores en dotnet test. Sin embargo, su forma de insertar archivos DLL en el proceso no es estándar. Con los cambios de protección de seguridad en el entorno de ejecución de .NET 10, no se encuentra el archivo DLL vinculado, lo que provoca que el proceso se bloquee con un error. Es posible que el error no esté visible en sesiones no interactivas o en la línea de comandos, pero el proceso se bloquea.
La instrumentación nativa dinámica ya está deshabilitada de forma predeterminada por dotnet-coverage, que es una manera alternativa de recopilar cobertura de código mediante las mismas herramientas subyacentes. También está deshabilitado de forma predeterminada para las soluciones de Visual Studio que no tienen proyectos nativos.
Acción recomendada
Si recopila cobertura sobre soluciones que no tienen componentes nativos, no debería verse afectado. Sin embargo, es posible que observe un mayor rendimiento al recopilar cobertura.
Si recopila cobertura sobre soluciones que incluyen componentes nativos, como proyectos de C++, tiene las siguientes opciones:
Configuración de los proyectos para usar la instrumentación nativa estática
OR
Actualice a Microsoft.CodeCoverage 18.0.1 y habilite la instrumentación nativa dinámica:
- Agregue la configuración
<EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation>al archivo runsettings . - Excluirse globalmente de este nuevo valor predeterminado configurando la variable de entorno
VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1.
Del mismo modo, al recopilar cobertura de código con
vstest.console, se requiere la versión 18.0.1 de VSTest y versiones posteriores para recopilar correctamente la cobertura nativa dinámica en sistemas que tengan instalado el SDK de .NET 10.- Agregue la configuración
Las APIs afectadas
Ninguno.