Menulis dan men-debug kode yang berjalan dengan Hot Reload di Visual Studio (C#, Visual Basic, C++)

Dimulai dari Visual Studio 2022, pengalaman Hot Reload di Visual Studio berfungsi untuk aplikasi .NET dan C++ terkelola. Terlepas dari jenis aplikasi yang sedang Anda kerjakan, tujuan Hot Reload adalah untuk menyelamatkan Anda selagi banyak aplikasi memulai ulang selama pengeditan, membuat Anda lebih produktif dengan mengurangi waktu yang Anda habiskan untuk menunggu aplikasi membangun kembali, memulai ulang, menavigasi ulang lokasi terakhir di mana Anda berada di aplikasi tersebut, dst.

Kami mencapai ini dengan memungkinkan Anda untuk mengedit file kode aplikasi Anda dan segera menerapkan perubahan kode ke aplikasi yang sedang berjalan, juga dikenal sebagai Hot Reload. Setelah perubahan diterapkan, jalankan kembali kode Anda lagi dengan mengambil tindakan di aplikasi itu sendiri (atau melalui semacam timer, dll.) dan melihat perubahan segera; tidak diperlukan jeda aplikasi melalui titik henti!

Memperbarui kode yang sedang berjalan dengan Hot Reload

  1. Buka proyek berdasarkan jenis aplikasi yang didukung. Lihat aplikasi yang didukung .NET dan C++ .

  2. Mulai aplikasi dengan debugger yang dilampirkan menggunakan F5 atau, jika didukung, Ctrl+F5.

  3. Buka file kode dan ubah kode.

  4. Terapkan perubahan kode menggunakan tombol Hot Reload, atau tekan ALT+F10.

    Screenshot of the Hot Reload button.

Untuk melihat perubahan di antarmuka pengguna, kode perlu dijalankan kembali. Misalnya, code-behind untuk tombol harus dijalankan ulang, atau kode yang dipicu pada interval melalui timer. Sebagai contoh lain, ASP.NET Core mendukung refresh browser otomatis karena fungsionalitas MetadataUpdateHandler .

Dukungan untuk aplikasi .NET

  • Saat menggunakan Visual Studio 2022 dan memulai aplikasi Anda dengan debugger, pengalaman Hot Reload dasar berfungsi dengan sebagian besar jenis aplikasi .NET dan versi kerangka kerja. Ini termasuk .NET Framework, .NET Core dan .NET 5+ (untuk C# dan Visual Basic sebagaimana berlaku). Harapan dalam skenario ini adalah bahwa jika Anda menggunakan debugger, asumsikan Hot Reload tersedia untuk Anda dan mencobanya!
  • Saat menggunakan Visual Studio 2022 tetapi tidak menggunakan debugger (misalnya, menggunakan CTRL-F5 untuk memulai aplikasi), Hot Reload tersedia saat menargetkan sebagian besar jenis aplikasi .NET 6. Ini berarti bahwa aplikasi yang tidak menargetkan .NET 6 (.NET 5 atau di bawahnya) tidak mendukung skenario "tidak ada debugger" dan harus menggunakan debugger untuk mendapatkan dukungan Hot Reload.
  • Saat menggunakan Visual Studio 2022 dengan aplikasi .NET 6, sebagian besar skenario didukung. Ini tidak terbatas pada fitur "tanpa debugger" baru yang disebutkan di atas. Ini juga mencakup kemampuan baru lainnya, seperti dukungan untuk hot reloading proyek Blazor dan, lebih umum, mengedit file Razor di aplikasi ASP.NET Core, dan CSS Hot Reload. Menggunakan Visual Studio 2022 dan aplikasi yang menargetkan .NET 6 bersama-sama akan memberi Anda pengalaman Hot Reload yang paling kuat.

Tabel berikut menunjukkan proyek mana yang mendukung .NET Hot Reload dengan debugger terlampir (F5) dan tanpa debugger terpasang (Ctrl+F5), sesuai dengan versi .NET minimum yang diperlukan untuk dukungan di Visual Studio 2022 (17.8).

Jenis aplikasi F5 Ctrl+F5 MetadataUpdateHandler Dukungan
Konsol .NET 6 .NET 6
Berjalan di Linux/macOS
(Docker dan WSL)
.NET 8 .NET 6 .NET 8
Berjalan di Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .NET 6 .NET 6 .NET 6
Blazor WebAssembly .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Jenis pengeditan yang dapat Anda lakukan dengan Hot Reload ditentukan oleh versi runtime dan kompilator, bukan dengan metode yang Anda gunakan untuk memulai aplikasi (F5 atau Ctrl+F5).

Di bagian berikut, kita akan memperluas ringkasan di atas dan menyelami detail selengkapnya.

Dukungan untuk aplikasi C++

Saat menggunakan Visual Studio 2022 dan memulai aplikasi Anda dengan debugger, Anda dapat memuat ulang aplikasi C++ asli saat berjalan di bawah debugger (F5) menggunakan tombol Hot Reload. Hot Reload juga didukung untuk aplikasi yang dibuat menggunakan proyek CMake dan OpenFolder.

Agar proyek Anda mendukung Hot Reload, Anda akan memerlukan:

  • Properti Proyek > C/C++ > Format Informasi Debug Umum >harus diatur ke "Database Program untuk Edit dan Lanjutkan /ZI">
  • Project > Properties > Linker > General >Enable Incremental Linking harus diatur ke "Ya /INCREMENTAL"

Untuk pengeditan yang didukung, lihat Perubahan Kode yang Didukung C++.

Visual Studio 2022 dengan aplikasi .NET, saat menggunakan debugger

Saat menggunakan Visual Studio 2022 dan memulai aplikasi dengan debugger, Hot Reload berfungsi dengan sebagian besar kerangka kerja aplikasi.

Di mana saja Anda memiliki .NET dan Anda menggunakan debugger terkelola Visual Studio, Anda harus mendapatkan dukungan Hot Reload dasar. Fakta ini berarti bahwa bahkan proyek seperti Azure Functions bekerja dengan baik dalam skenario ini.

Catatan

Beberapa proyek menggunakan debugging mode campuran default, yang tidak mendukung Hot Reload. Anda dapat mengubah ini di pengaturan proyek, dengan mengatur antarmuka pengguna > peluncuran profil peluncuran Debug > Properti Proyek >> Aktifkan penelusuran kesalahan kode asli ke false.

Visual Studio 2022 dengan aplikasi .NET, tetapi tidak menggunakan debugger

Hot Reload tersedia tanpa debugger saat menargetkan sebagian besar jenis aplikasi .NET 6+.

Fitur ini eksklusif untuk .NET 6+. Aplikasi yang tidak menargetkan .NET 6+ (yaitu, .NET 5 atau di bawahnya) tidak akan mendukung skenario "tanpa debugger" dan harus menggunakan debugger untuk mendapatkan akses ke fungsionalitas Hot Reload.

Selain itu, ketahuilah bahwa tidak semua jenis proyek saat ini mendukung skenario "tanpa debugger", lihat Dukungan untuk aplikasi .NET.

Visual Studio 2022 dengan aplikasi .NET 6+

Jika Anda menggunakan Visual Studio 2022 dan mengerjakan aplikasi yang menargetkan .NET 6+, Anda mendapatkan manfaat dari pengalaman Hot Reload yang paling dipolihkan dan mampu.

Didukung dalam skenario ini:

  • Aplikasi Blazor (Server dan WebAssembly)
  • Mengedit file Razor di blazor dan situs web ASP.NET Core reguler
  • CSS Hot Reload
  • XAML Hot Reload
  • Dukungan Hot Reload saat menjalankan aplikasi tanpa debugger (seperti yang dijelaskan sebelumnya secara lebih rinci)

Jika Anda menargetkan .NET 6+, Anda terus mendapatkan peningkatan dalam pembaruan Visual Studio 2022 mendatang dan band fitur .NET dan rilis utama.

Skenario inti ASP.NET yang didukung

Pengalaman Hot Reload dasar didukung untuk banyak skenario ASP.NET. Fitur yang paling tersedia secara luas adalah kemampuan untuk mengubah code-behind dan file kelas .NET lainnya untuk sebagian besar jenis aplikasi web. Fitur ini berfungsi saat menggunakan debugger Visual Studio dan ada di mana saja Hot Reload sebelumnya tersedia. Untuk panduan yang lebih spesifik, lihat dukungan .NET Hot Reload untuk ASP.NET Core.

Untuk pengembang ASP.NET Core yang menargetkan .NET 6+, ada kemampuan tambahan yang tidak tersedia untuk versi .NET yang lebih rendah. Kemampuan ini mencakup:

  • CSHTML: Mengedit file Razor CSHTML mendukung banyak jenis pengeditan.
  • Penyegaran Browser: Mengedit file razor secara otomatis me-refresh perubahan di browser web Anda saat melakukan debug. Fitur ini sebelumnya hanya tersedia saat memulai aplikasi tanpa debugger.
  • CSS Hot Reload: Anda dapat mengubah file CSS saat aplikasi sedang berjalan, dan perubahan segera diterapkan ke aplikasi yang sedang berjalan saat Anda mengetik.
  • Tidak Ada Debugger: Anda mendapatkan dukungan Hot Reload saat menggunakan Visual Studio untuk memulai aplikasi web Anda tanpa debugger (CTRL-F5).

Perubahan .NET yang didukung

Pengalaman .NET Hot Reload didukung oleh debugger dan kompilator C# (Roslyn). Pengeditan yang didukung Roslyn dan Perubahan kode yang didukung (C# dan VB) mencantumkan jenis pengeditan yang saat ini didukung dan potensi penyempurnaan di masa mendatang.

Proyek .NET yang tidak didukung

Hot Reload tidak tersedia dalam beberapa konfigurasi proyek:

  • Jika Anda menggunakan Visual Studio tanpa debugger, Hot Reload hanya berfungsi untuk aplikasi .NET yang menargetkan .NET 6+.
  • Jika Anda menggunakan debugger Visual Studio untuk menjalankan aplikasi, tetapi Anda telah menonaktifkan Enable Hot Reload and Edit and Continue when debugging di pengaturan, Hot Reload tidak didukung.
  • Konfigurasi rilis atau build kustom tidak didukung. Proyek Anda harus menggunakan Debug konfigurasi build.
  • Jika Anda menargetkan proyek Asli F# atau .NET.
  • Beberapa pengoptimalan startup atau kompilasi tidak didukung di .NET Hot Reload. Misalnya, jika profil debug proyek Anda dikonfigurasi dengan cara berikut, .NET Hot Reload tidak didukung:
    • Pemangkasan diaktifkan untuk proyek Anda. Misalnya, ini tidak didukung jika PublishTrimmed diatur ke True dalam file proyek Anda untuk profil debug.
    • ReadyToRun diaktifkan untuk proyek Anda. Misalnya, ini tidak didukung jika PublishReadyToRun diatur ke True dalam file proyek Anda untuk profil debug.

Lihat Skenario yang tidak didukung untuk detail selengkapnya.

Mengonfigurasi Hot Reload

Untuk mengaktifkan, menonaktifkan, atau mengonfigurasi Hot Reload, lihat Mengonfigurasi Edit dan Lanjutkan.

Pesan peringatan

Jika Anda melihat kotak dialog berikut, Hot Reload tidak dapat menerapkan pengeditan saat ini tanpa memulai ulang. Anda dapat memilih untuk membangun kembali aplikasi dan menerapkan perubahan (mulai ulang) atau untuk melanjutkan pengeditan. Jika Anda membangun kembali, semua status aplikasi akan hilang. Jika Anda terus mengedit, ada kemungkinan perubahan atau koreksi tambahan dapat menyebabkan Hot Reload berfungsi lagi.

Screenshot of the apply changes dialog box

Jika Anda memilih opsi Selalu bangun ulang saat perubahan tidak dapat diterapkan dalam kotak dialog, Anda tidak akan melihat kotak dialog lagi di sesi Visual Studio saat ini, dan Visual Studio akan secara otomatis membangun ulang dan memuat ulang alih-alih menampilkan kotak dialog.

Pemecahan Masalah

Sangat disarankan untuk memeriksa jendela Output Isi Ulang Panas untuk informasi diagnostik terperinci mengenai sesi Hot Reload.

Jika Anda menggunakan kompresi respons di .NET Core, lihat informasi tentang kompresi respons.