Bagikan melalui


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, namun tidak dapat diterapkan selama debugging. 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, namun tidak dapat diterapkan selama debugging. 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 debugging tanpa harus memulai ulang.

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

Nota

Fitur bahasa yang lebih baru seperti interpolasi string dan operator null-conditional umumnya didukung oleh Edit dan Lanjutkan. Untuk informasi terbaru, lihat halaman Pengeditan yang Didukung Enc. Untuk .NET Framework, fitur yang didukung adalah subset dari fitur yang tercantum dan bergantung pada versi kompilator.

Peningkatan .NET 6 dan versi lebih baru

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 and Continue 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 debugging.

  • Perubahan pada pernyataan saat ini atau pernyataan aktif lainnya.

    Pernyataan aktif adalah setiap pernyataan dalam fungsi di tumpukan panggilan yang digunakan untuk mencapai pernyataan saat ini.

    Pernyataan saat ini muncul pada latar belakang kuning di jendela sumber. Pernyataan aktif lainnya muncul di latar belakang berbayang dan hanya dapat dibaca. 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.

    Untuk .NET 6+ dan Visual Studio 2022, lihat Pengeditan yang Didukung untuk jenis pengeditan yang saat ini didukung dan tidak didukung.

    Elemen atau fitur bahasa Operasi edit yang tidak didukung
    Semua elemen kode Mengganti nama
    Namespace Tambah
    Namespace, jenis, anggota Menghapus
    Antarmuka Mengubah
    Jenis Tambahkan anggota abstrak atau virtual, tambahkan metode override (lihat detail di dan)
    Jenis Menambahkan destruktor
    Anggota - Memodifikasi anggota yang mereferensikan jenis interop yang disematkan
    - Memodifikasi anggota statis setelah diakses dengan menjalankan kode
    Anggota (Visual Basic) - Memodifikasi anggota dengan menggunakan 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 Menambahkan atau mengubah
    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
    blok penangkapan Ubah saat berisi pernyataan aktif
    blok try-catch-finally Ubah saat berisi pernyataan aktif
    menggunakan pernyataan Tambah
    metode asinkron/lambda Ubah 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 versi sebelumnya (lihat detail )
    Elemen atau fitur bahasa Operasi edit yang tidak didukung
    Semua elemen kode Mengganti nama
    Namespace Tambah
    Namespace, jenis, anggota Menghapus
    Generik Menambahkan atau mengubah
    Antarmuka Mengubah
    Jenis Tambahkan anggota abstrak atau virtual, tambahkan metode override (lihat detail di dan)
    Jenis Menambahkan destruktor
    Anggota - Memodifikasi anggota yang mereferensikan jenis interop yang disematkan
    - Memodifikasi anggota statis setelah diakses dengan menjalankan kode
    Anggota (Visual Basic) - Memodifikasi anggota dengan menggunakan 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 Menambahkan atau mengubah
    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
    blok penangkapan Ubah saat berisi pernyataan aktif
    blok try-catch-finally Ubah saat berisi pernyataan aktif
    menggunakan pernyataan Tambah
    metode asinkron/lambda Ubah 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 versi sebelumnya (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 operator stackalloc.

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
  • .pisau cukur

Aplikasi, platform, dan operasi yang tidak didukung

Aplikasi atau platform yang tidak didukung meliputi:

  • F#
  • Asli .NET
  • 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
  • .pisau cukur

Skenario yang tidak didukung

Edit dan Lanjutkan tidak tersedia dalam skenario debagging berikut:

  • Penelusuran kesalahan mode campuran (asli/terkelola).

  • Debugging pada Arm64 tanpa menargetkan .NET 7 atau yang lebih baru.

  • Debugging dengan variabel lingkungan COR_ENABLE_PROFILING yang disetel.

  • Men-debug 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).

  • Debugging dengan versi assembly yang 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.

  • Debugging kode yang telah dioptimalkan.

  • Pemecahan masalah SQL.

  • Men-debug file cadangan.

  • Men-debug aplikasi runtime yang disematkan.

  • Men-debug versi lama kode Anda setelah versi baru gagal dibuat karena kesalahan build.