Bagikan melalui


Cakupan kode EnableDynamicNativeInstrumentation default ke false

Menjalankan dotnet test --collect:"Code Coverage" sekarang menonaktifkan instrumentasi asli dinamis secara default. Perubahan ini memengaruhi bagaimana cakupan kode dikumpulkan dari kode asli. Ini tidak memengaruhi bagaimana cakupan kode dikumpulkan dari kode terkelola.

Versi yang diperkenalkan

.NET 10 GA

Perilaku sebelumnya

Sebelumnya, instrumentasi asli dinamis diaktifkan secara default dan menggunakan fallback untuk modul asli ketika instrumentasi asli statis tidak dapat digunakan. Perilaku ini dijelaskan dalam instrumentasi asli statis dan dinamis.

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

Perilaku baru

Mulai dari .NET 10, instrumentasi asli dinamis dinonaktifkan secara default. Opsi <EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> diatur secara default dari dotnet test dan vstest. Jika Anda secara eksplisit mengatur opsi dalam file runsettings, maka opsi tersebut tidak akan ditimpa.

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

Anda dapat mengaktifkan kembali instrumentasi asli dinamis dengan mengatur <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> dalam file runsettings Anda. Namun, ketika Anda melakukannya, itu mungkin gagal dengan "Eksekusi kode tidak dapat dilanjutkan karena covrun64.dll tidak ditemukan." Kesalahan ini juga dapat terjadi dalam covrun32.dll proses 32-bit.

Jenis perubahan yang memutus kompatibilitas

Perubahan ini adalah perubahan perilaku.

Alasan perubahan

Instrumentasi asli dinamis diaktifkan secara default untuk mempertahankan kompatibilitas mundur di dotnet test. Namun, caranya untuk menyuntikkan DLL ke dalam proses tidak standar. Dengan perubahan penguatan keamanan dalam runtime .NET 10, runtime gagal menemukan DLL yang ditautkan, menyebabkan proses mengalami kerusakan dengan kesalahan. Kesalahan mungkin tidak terlihat dalam sesi non-interaktif atau di baris perintah, tetapi prosesnya mengalami crash.

Instrumentasi asli dinamis sudah dinonaktifkan secara default oleh dotnet-coverage, sebagai cara alternatif untuk mengumpulkan cakupan kode menggunakan alat dasar yang sama. Ini juga dinonaktifkan secara default untuk solusi di Visual Studio yang tidak memiliki proyek asli.

Jika Anda mengumpulkan cakupan pada solusi yang tidak memiliki komponen dalam negeri, Anda tidak akan terpengaruh. Namun, Anda mungkin mengamati peningkatan performa saat mengumpulkan cakupan.

Jika Anda mengumpulkan cakupan pada solusi yang menyertakan komponen asli, seperti proyek C++, Anda memiliki opsi berikut:

  • Mengonfigurasi proyek Anda untuk menggunakan instrumentasi asli statis

    OR

  • Perbarui ke Microsoft.CodeCoverage 18.0.1 dan aktifkan instrumentasi asli dinamis:

    • Tambahkan pengaturan <EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> ke file runsettings Anda.
    • Memilih keluar secara global dari default baru ini dengan mengatur VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1 variabel lingkungan.

    Demikian pula, ketika mengumpulkan cakupan kode dengan vstest.console, VSTest versi 18.0.1 dan yang lebih baru diperlukan untuk berhasil mengumpulkan cakupan asli dinamis pada sistem yang menginstal .NET 10 SDK.

API yang terpengaruh

Tidak ada.