Perubahan kode yang didukung (C# dan Visual Basic)

Mekanisme Hot Reload, yang sebelumnya disebut Edit dan Lanjutkan, menangani sebagian besar jenis perubahan kode dalam isi metode. Sebagian besar perubahan di luar badan metode, dan beberapa perubahan dalam badan metode, tidak dapat diterapkan selama penelusuran kesalahan, namun. Untuk menerapkan perubahan yang tidak didukung tersebut, Anda harus menghentikan penelusuran kesalahan dan memulai ulang dengan versi kode yang baru.

Mekanisme Edit dan Lanjutkan menangani sebagian besar jenis perubahan kode dalam badan metode. Sebagian besar perubahan di luar badan metode, dan beberapa perubahan dalam badan metode, tidak dapat diterapkan selama penelusuran kesalahan, namun. Untuk menerapkan perubahan yang tidak didukung tersebut, Anda harus menghentikan penelusuran kesalahan dan memulai ulang dengan versi kode yang baru.

Perubahan yang didukung pada kode

Tabel berikut menunjukkan perubahan yang mungkin dilakukan pada kode C# dan Visual Basic selama sesi penelusuran kesalahan tanpa memulai ulang sesi.

Elemen atau fitur bahasa Operasi edit yang didukung Pembatasan
Jenis Menambahkan metode, bidang, konstruktor, dan lainnya Ya
Iterator Tambahkan atau modifikasi No
ekspresi asinkron/menunggu Tambahkan atau modifikasi Ya
Objek dinamis Tambahkan atau modifikasi No
ekspresi lambda Tambahkan atau modifikasi Ya
Ekspresi LINQ Tambahkan atau modifikasi Sama seperti ekspresi lambda
Generik Tambahkan atau modifikasi Ya
Elemen atau fitur bahasa Operasi edit yang didukung Pembatasan
Jenis Menambahkan metode, bidang, konstruktor, dan lainnya Ya
Iterator Tambahkan atau modifikasi No
ekspresi asinkron/menunggu Tambahkan atau modifikasi Ya
Objek dinamis Tambahkan atau modifikasi No
ekspresi lambda Tambahkan atau modifikasi Ya
Ekspresi LINQ Tambahkan atau modifikasi Sama seperti ekspresi lambda

Catatan

Fitur bahasa yang lebih baru seperti interpolasi string dan operator kondisi null umumnya didukung oleh Edit dan Lanjutkan. Untuk informasi terbaru, lihat halaman Enc Supported Edits.

Peningkatan .NET 6+

Peningkatan di .NET 6+ dan Visual Studio 2022 dan versi yang lebih baru mencakup dukungan untuk lebih banyak jenis pengeditan yang melampaui apa yang awalnya mungkin di versi Visual Studio yang lebih lama. Peningkatan ini tersedia untuk Hot Reload dan pengalaman Edit dan Lanjutkan.

Pengalaman .NET 6+ Hot Reload didukung oleh mekanisme Edit dan Lanjutkan dan Roslyn. Pengeditan yang Didukung mencantumkan jenis pengeditan yang saat ini didukung oleh Roslyn dan potensi penyempurnaan di masa mendatang.

Perubahan yang tidak didukung pada kode

Perubahan berikut tidak dapat diterapkan ke kode C# dan Visual Basic selama sesi penelusuran kesalahan.

  • Perubahan pada pernyataan saat ini atau pernyataan aktif lainnya.

    Pernyataan aktif adalah pernyataan apa pun dalam fungsi pada tumpukan panggilan yang dipanggil untuk masuk ke pernyataan saat ini.

    Pernyataan saat ini muncul pada latar belakang kuning di jendela sumber. Pernyataan aktif lainnya muncul di latar belakang berbayang dan berbayang baca-saja. Warna default ini dapat diubah dalam kotak dialog Opsi.

  • Setiap perubahan yang tidak didukung pada kode menurut elemen bahasa seperti yang diuraikan dalam tabel berikut.

    Elemen atau fitur bahasa Operasi edit yang tidak didukung
    Elemen kode grup Mengubah nama
    Namespace Tambahkan
    Namespace layanan, jenis, anggota Delete
    Antarmuka Mengubah
    Jenis Tambahkan anggota abstrak atau virtual, tambahkan penimpaan (lihat detail)
    Jenis Tambahkan destruktor
    Anggota - Memodifikasi anggota yang mereferensikan jenis interop yang disematkan
    - Memodifikasi anggota statis setelah diakses dengan menjalankan kode
    Anggota (Visual Basic) - Mengubah anggota dengan pernyataan On Error atau Resume
    - Mengubah anggota yang berisi klausa kueri Agregat, Kelompokkan Menurut, Gabung Sederhana, atau Gabungan Grup LINQ
    Metode - Memodifikasi tanda tangan
    - Membuat metode abstrak menjadi nonabstrak dengan menambahkan isi metode
    - Hapus isi metode
    Atribut Tambahkan atau modifikasi
    Peristiwa atau properti Mengubah parameter jenis, jenis dasar, jenis delegasi, atau jenis pengembalian
    Operator atau pengindeks Mengubah parameter jenis, jenis dasar, jenis delegasi, atau jenis pengembalian
    menangkap blok Mengubah saat berisi pernyataan aktif
    blok try-catch-finally Mengubah saat berisi pernyataan aktif
    menggunakan pernyataan Tambahkan
    metode asinkron/lambda Memodifikasi metode asinkron/lambda dalam proyek yang menargetkan .NET Framework 4 dan yang lebih rendah (lihat detail)
    Iterator Mengubah iterator dalam proyek yang menargetkan .NET Framework 4 dan yang lebih lama (lihat detail)
    Elemen atau fitur bahasa Operasi edit yang tidak didukung
    Elemen kode grup Mengubah nama
    Namespace Tambahkan
    Namespace layanan, jenis, anggota Delete
    Generik Tambahkan atau modifikasi
    Antarmuka Mengubah
    Jenis Tambahkan anggota abstrak atau virtual, tambahkan penimpaan (lihat detail)
    Jenis Tambahkan destruktor
    Anggota - Memodifikasi anggota yang mereferensikan jenis interop yang disematkan
    - Memodifikasi anggota statis setelah diakses dengan menjalankan kode
    Anggota (Visual Basic) - Mengubah anggota dengan pernyataan On Error atau Resume
    - Mengubah anggota yang berisi klausa kueri Agregat, Kelompokkan Menurut, Gabung Sederhana, atau Gabungan Grup LINQ
    Metode - Memodifikasi tanda tangan
    - Membuat metode abstrak menjadi nonabstrak dengan menambahkan isi metode
    - Hapus isi metode
    Atribut Tambahkan atau modifikasi
    Peristiwa atau properti Mengubah parameter jenis, jenis dasar, jenis delegasi, atau jenis pengembalian
    Operator atau pengindeks Mengubah parameter jenis, jenis dasar, jenis delegasi, atau jenis pengembalian
    menangkap blok Mengubah saat berisi pernyataan aktif
    blok try-catch-finally Mengubah saat berisi pernyataan aktif
    menggunakan pernyataan Tambahkan
    metode asinkron/lambda Memodifikasi metode asinkron/lambda dalam proyek yang menargetkan .NET Framework 4 dan yang lebih rendah (lihat detail)
    Iterator Mengubah iterator dalam proyek yang menargetkan .NET Framework 4 dan yang lebih lama (lihat detail)

Kode tidak aman

Perubahan pada kode yang tidak aman memiliki batasan yang sama dengan perubahan pada kode aman, dengan satu batasan tambahan: Edit dan Lanjutkan tidak mendukung perubahan pada kode tidak aman yang keluar dalam metode yang berisi stackalloc operator.

Dukungan aplikasi

Aplikasi yang didukung meliputi:

  • Aplikasi UWP di Windows 10 atau Windows 11
  • Aplikasi x86 dan x64 yang menargetkan desktop .NET Framework 4.6 atau versi yang lebih baru (.NET Framework hanya versi desktop)

Untuk .NET 6 dan yang lebih baru, pengeditan didukung untuk jenis file berikut:

  • .cshtml
  • .razor

Aplikasi, platform, dan operasi yang tidak didukung

Aplikasi atau platform yang tidak didukung meliputi:

  • F#
  • .NET Native
  • Silverlight 5
  • Windows 8.1
  • Xamarin.Forms (iOS dan Android)

Untuk ASP.NET dan ASP.NET Core, pengeditan tidak didukung untuk jenis file berikut:

  • .aspx
  • .ascx
  • .aspx
  • .ascx
  • .cshtml
  • .razor

Skenario yang tidak didukung

Edit dan Lanjutkan tidak tersedia dalam skenario penelusuran kesalahan berikut:

  • Debugging mode campuran (asli/terkelola).

  • Penelusuran kesalahan di Arm64 tanpa menargetkan .NET 7 atau yang lebih baru.

  • Penelusuran kesalahan dengan set variabel lingkungan COR_ENABLE_PROFILING .

  • Menelusuri kesalahan aplikasi menggunakan lampirkan ke proses (Debug > Lampirkan ke Proses) alih-alih menjalankan aplikasi dengan memilih Mulai dari menu Debug. Jika Anda ingin menggunakan Edit dan Lanjutkan saat melampirkan ke proses, variabel lingkungan COMPLUS_ForceENC harus diatur sebelum meluncurkan proses (set COMPLUS_ForceENC=1).

  • Penelusuran kesalahan dengan versi rakitan nondeterministik (misalnya, berbasis waktu). Jika Anda ingin menggunakan Edit dan Lanjutkan, pertimbangkan untuk mengatur versi hanya di build Rilis (atau CI) dan pertahankan versi di Build debug tetap konstan.

  • Menelusuri kesalahan kode yang dioptimalkan.

  • Penelusuran Kesalahan SQL.

  • Penelusuran kesalahan file cadangan.

  • Menelusuri kesalahan aplikasi runtime bahasa umum yang disematkan.

  • Menelusuri kesalahan versi lama kode Anda setelah versi baru gagal dibuat karena kesalahan build.