Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При выполнении dotnet test --collect:"Code Coverage" теперь по умолчанию отключается динамическое встроенное инструментирование. Это изменение влияет на сбор покрытия кода из нативного кода. Это не влияет на процесс сбора данных покрытия кода из управляемого кода.
Представленная версия
Общедоступная версия .NET 10
Предыдущее поведение
Ранее динамическое нативное инструментирование было включено по умолчанию и использовало резервный вариант для нативных модулей, если не удалось использовать статическое нативное инструментирование. Это поведение описано в нативном статическом и динамическом инструментировании.
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation was enabled by default
Новое поведение
Начиная с .NET 10 динамическое нативное инструментирование отключено по умолчанию. Параметр <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> устанавливается по умолчанию из dotnet test и vstest. Если вы явно задали параметр в файле runsettings , он не переопределяется.
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation is now disabled by default
Вы можете включить заново динамическое нативное инструментирование, задав параметр <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> в файле runsettings. Однако при возникновении этой ошибки может появиться сообщение "Невозможно выполнить код, так как не найден covrun64.dll." Эта ошибка также может произойти в 32-разрядном процессе covrun32.dll.
Тип разрушающего изменения
Это изменение поведения.
Причина изменения
Динамическое встроенное инструментирование по умолчанию было включено для обеспечения обратной совместимости dotnet test. Однако его способ внедрения библиотек DLL в процесс не является стандартным. При изменении безопасности в среде выполнения .NET 10 не удается найти связанную библиотеку DLL, что приведет к сбою процесса с ошибкой. Ошибка может не отображаться в неинтерактивных сеансах или в командной строке, но процесс завершается сбоем.
Динамическое собственное инструментирование уже отключено по умолчанию dotnet-coverage, что является альтернативным способом сбора покрытия кода с помощью тех же самых базовых средств. Он также отключен по умолчанию для решений в Visual Studio, которые не имеют собственных проектов.
Рекомендуемое действие
Если вы собираете покрытие для решений, которые не имеют собственных компонентов, на вас это не должно повлиять. Однако при сборе покрытия вы можете заметить улучшение производительности.
Если вы собираете охват решений, включающих собственные компоненты, такие как проекты C++, у вас есть следующие варианты:
Настройка проектов для использования статической нативной инструментации
OR
Обновите microsoft.CodeCoverage 18.0.1 и включите динамическое встроенное инструментирование:
- Добавьте параметр
<EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation>в файл runsettings . - Глобально отключить использование новых настроек по умолчанию, установив переменную среды
VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1.
Аналогичным образом, при сборе покрытия кода с
vstest.consoleпомощью VSTest версии 18.0.1 и более поздних версий требуется, чтобы успешно собирать динамическое собственное покрытие на системах с установленным SDK .NET 10.- Добавьте параметр
Затронутые API
Нет.