Bagikan melalui


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

Mulai dari Visual Studio 2022, pengalaman Hot Reload di Visual Studio berfungsi untuk aplikasi .NET terkelola dan C++ asli. Terlepas dari jenis aplikasi yang sedang Anda kerjakan, niat Hot Reload adalah untuk menghemat hidupkan ulang aplikasi sebanyak mungkin di antara pengeditan, sehingga Anda lebih produktif dengan mengurangi waktu yang Anda habiskan untuk menunggu aplikasi dibangun kembali, memulai ulang, menavigasi ulang ke lokasi sebelumnya tempat Anda berada di aplikasi itu sendiri, dkk.

Kami meningkatkan produktivitas dengan memungkinkan Anda mengedit file kode aplikasi 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 .NET dan C++ aplikasi yang didukung.

  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.

    Cuplikan layar tombol Hot Reload.

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. Dukungan ini mencakup .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. Dalam skenario ini, aplikasi yang tidak menargetkan .NET 6+ (yaitu, mereka menargetkan .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. Dukungan ini tidak terbatas pada fitur "tanpa debugger" baru yang disebutkan di atas. Ini juga termasuk kemampuan baru lainnya, seperti dukungan untuk proyek Blazor hot reloading dan, lebih umum, mengedit file Razor di aplikasi ASP.NET Core apa pun, dan CSS Hot Reload. Menggunakan Visual Studio 2022 dan aplikasi yang menargetkan .NET 6 bersama-sama 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 dukungan MetadataUpdateHandler
Konsol .NET 6 .NET 6
Berjalan di Linux/macOS
(Docker dan WSL)
.NET 8 .NET 6 .NET 8
Berjalan pada Arm64 .NET 7 .NET 7 .NET 7
WPF (Windows Presentation Foundation) .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, kami memberikan detail tambahan.

Dukungan untuk aplikasi C++

Saat menggunakan Visual Studio 2022 dan memulai aplikasi Anda dengan debugger, Anda dapat melakukan hot reload aplikasi C++ native ketika sedang berjalan di bawah debugger (F5) dengan menggunakan tombol Hot Reload. Hot Reload juga didukung untuk aplikasi yang dibangun menggunakan proyek CMake dan OpenFolder.

Agar proyek Anda mendukung Hot Reload, Anda memerlukan set opsi berikut:

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

Untuk perubahan kode yang didukung, lihat Perubahan Kode C++ yang Didukung.

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.

Nota

Secara default, beberapa proyek menggunakan debugging mode campuran, yang tidak mendukung Hot Reload. Anda dapat mengubah pengaturan ini dalam pengaturan proyek, dengan mengatur Properti > Proyek > Debug > Buka profil peluncuran debug UI > Mengaktifkan 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, mereka menargetkan .NET 5 atau di bawahnya) tidak mendukung skenario "tidak ada debugger" dan harus menggunakan debugger untuk mendapatkan akses ke fungsionalitas Hot Reload.

Selain itu, 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 dapat merasakan manfaat dari pengalaman Hot Reload terbaik dan berkemampuan tinggi.

Didukung dalam skenario ini:

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

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

Skenario ASP.NET Core yang didukung

Pengalaman Hot Reload dasar didukung untuk banyak skenario ASP.NET. Fitur yang paling banyak tersedia 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 meliputi:

  • CSHTML: Mengedit file Razor CSHTML mendukung banyak jenis pengeditan.
  • Browser Refresh: Mengedit file Razor secara otomatis menyegarkan perubahan di browser web Anda saat debugging. Fitur ini sebelumnya hanya tersedia saat memulai aplikasi tanpa debugger.
  • CSS Hot Reload: Anda dapat mengubah file CSS saat aplikasi berjalan, dan perubahan segera diterapkan ke aplikasi yang sedang berjalan saat Anda mengetik.
  • Tanpa 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 pengkompilasi C# (Roslyn). Roslyn mendukung pengeditan 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 konfigurasi build Debug.
  • Jika Anda menargetkan proyek F# atau .NET Asli.
  • 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, tidak didukung apabila PublishTrimmed disetel ke True di dalam file proyek Anda untuk profil debug.
    • ReadyToRun diaktifkan untuk proyek Anda. Misalnya, tidak didukung apabila PublishReadyToRun disetel ke True di 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.

Cuplikan layar kotak dialog terapkan perubahan

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 kembali dan memuat ulang alih-alih menampilkan kotak dialog.

Pemecahan masalah

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

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