Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini berlaku untuk: ✔️ .NET 6 SDK dan versi yang lebih baru
Nama
dotnet watch - Menghidupkan ulang atau hot memuat ulang aplikasi yang ditentukan, atau menjalankan perintah dotnet tertentu, ketika perubahan kode sumber terdeteksi.
Sinopsis
dotnet watch [<command>]
[--artifacts-path <ARTIFACTS_DIR>] [--disable-build-servers]
[--list] [--no-hot-reload] [--no-self-contained]
[--non-interactive] [--project <PROJECT>] [--sc|--self-contained]
[-q|--quiet] [-v|--verbose] [--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Description
Perintahnya dotnet watch adalah pengamat file. Saat mendeteksi perubahan, ia menjalankan dotnet run perintah atau perintah yang ditentukan dotnet . Jika berjalan dotnet run, dan perubahan didukung untuk isi ulang panas, panas akan memuat ulang aplikasi yang ditentukan. Jika perubahan tidak didukung, perubahan akan memulai ulang aplikasi. Proses ini memungkinkan pengembangan berulang yang cepat dari baris perintah.
Saat menjalankan dotnet watch, Anda dapat memaksa aplikasi untuk membangun kembali dan memulai ulang dengan menekan Ctrl+R di shell perintah. Fitur ini hanya tersedia saat aplikasi sedang berjalan. Misalnya, jika Anda menjalankan dotnet watch pada aplikasi konsol yang berakhir sebelum Anda menekan Ctrl+R, menekan Ctrl+R tidak berpengaruh. Namun, dalam hal dotnet watch ini masih menonton file dan akan menghidupkan ulang aplikasi jika file diperbarui.
Kompresi respons
Jika dotnet watch berjalan untuk aplikasi yang menggunakan kompresi respons, alat tidak dapat menyuntikkan skrip refresh browser. Alat .NET 7 dan versi yang lebih baru menampilkan pesan peringatan seperti berikut ini:
peringatan: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Tidak dapat mengonfigurasi injeksi skrip refresh browser pada respons. Ini mungkin disebabkan oleh Pengodean Konten respons: 'br'. Pertimbangkan untuk menonaktifkan kompresi respons.
Sebagai alternatif untuk menonaktifkan kompresi respons, tambahkan referensi JavaScript refresh browser secara manual ke halaman aplikasi:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Arguments
<command>Di .NET 7 SDK dan yang lebih lama,
dotnet watchdapat menjalankan perintah apa pun yang dikirim melaluidotnetexecutable, seperti perintah CLI bawaan dan alat global. Jika Anda dapat menjalankandotnet <command>, Anda dapat menjalankandotnet watch <command>.Di .NET 8 SDK dan yang lebih baru,
dotnet watchdapat menjalankandotnet run, ,dotnet buildataudotnet test. Tentukanrun,build, atautestuntuk<command>.Jika perintah turunan tidak ditentukan, defaultnya adalah
rununtukdotnet run.<forwarded arguments>Argumen yang disediakan setelah tanda hubung ganda (
--) diteruskan ke proses turunandotnet. Jika Anda menjalankandotnet watch run, argumen ini adalah opsi untuk eksekusi dotnet. Jika Anda menjalankandotnet watch test, argumen ini adalah opsi untuk pengujian dotnet.
Opsi
-
--artifacts-path <ARTIFACTS_DIR>Semua file output build dari perintah yang dijalankan akan masuk ke subfolder di bawah jalur yang ditentukan, dipisahkan oleh proyek. Untuk informasi selengkapnya, lihat Tata Letak Output Artefak . Tersedia sejak .NET 8 SDK.
-
--disable-build-serversMemaksa perintah untuk mengabaikan server build persisten apa pun. Opsi ini menyediakan cara yang konsisten untuk menonaktifkan semua penggunaan penembolokan build, yang memaksa build dari awal. Build yang tidak mengandalkan cache berguna ketika cache mungkin rusak atau salah karena beberapa alasan. Tersedia sejak .NET 7 SDK.
--listMencantumkan semua file yang ditemukan tanpa memulai pengamat.
-
--no-self-containedTerbitkan aplikasi Anda sebagai aplikasi yang bergantung pada kerangka kerja. Runtime .NET yang kompatibel harus diinstal pada komputer target untuk menjalankan aplikasi Anda.
--no-hot-reloadTekan hot reload untuk aplikasi yang didukung.
--non-interactivedotnet watchBerjalan dalam mode non-interaktif. Gunakan opsi ini untuk mencegah input konsol diminta. Saat hot reload diaktifkan dan pengeditan kasar terdeteksi, dotnet watch memulai ulang aplikasi. Tersedia sejak .NET 7 SDK.--project <PATH>Menentukan jalur file proyek yang akan dijalankan (hanya folder atau menyertakan nama file proyek). Jika tidak ditentukan, defaultnya ke direktori saat ini.
-
--sc|--self-containedTerbitkan runtime .NET dengan aplikasi Anda sehingga runtime tidak perlu diinstal pada komputer target.
-q|--quietMenekan semua output yang dihasilkan oleh
dotnet watchperintah kecuali peringatan dan kesalahan. Opsi tidak diteruskan ke perintah turunan. Misalnya, output daridotnet restoredandotnet runterus menjadi output.-v|--verboseMenampilkan output verbose untuk penelusuran kesalahan.
--versionMemperlihatkan versi
dotnet watch.--Opsi tanda hubung ganda ('--') dapat digunakan untuk memisahkan
dotnet watchopsi dari argumen yang akan diteruskan ke proses anak. Penggunaannya bersifat opsional. Ketika opsi tanda hubung ganda tidak digunakan,dotnet watchpertimbangkan argumen pertama yang tidak dikenali sebagai awal argumen yang harus diteruskan ke proses turunandotnet.-
-?|-h|--helpMencetak deskripsi cara menggunakan perintah.
Variabel lingkungan
dotnet watch menggunakan variabel lingkungan berikut:
DOTNET_HOTRELOAD_NAMEDPIPE_NAMENilai ini dikonfigurasi oleh
dotnet watchketika aplikasi akan diluncurkan, dan menentukan pipa bernama.DOTNET_USE_POLLING_FILE_WATCHERSaat diatur ke
1atautrue,dotnet watchmenggunakan pengamat file polling alih-alih System.IO.FileSystemWatcher. Polling diperlukan untuk beberapa sistem file, seperti berbagi jaringan, volume yang dipasang Docker, dan sistem file virtual lainnya. Kelas PhysicalFileProvider menggunakan untuk menentukan apakah metode akan mengandalkanDOTNET_USE_POLLING_FILE_WATCHERPhysicalFileProvider.Watch.PollingFileChangeTokenDOTNET_WATCHdotnet watchmengatur variabel ini ke1pada semua proses turunan yang diluncurkannya.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAMESebagai bagian
dotnet watchdari , mekanisme server refresh browser membaca nilai ini untuk menentukan lingkungan host WebSocket. Nilai127.0.0.1digantikan olehlocalhost, danhttp://skema danhttps://diganti denganws://danwss://masing-masing.DOTNET_WATCH_ITERATIONdotnet watchmengatur variabel ini ke1dan bertambah satu per satu setiap kali file diubah dan perintah dimulai ulang atau panas memuat ulang aplikasi.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESHSaat diatur ke
1atautrue,dotnet watchtidak akan menyegarkan browser saat mendeteksi perubahan file.DOTNET_WATCH_SUPPRESS_EMOJISDengan .NET SDK 6.0.300 dan yang lebih baru,
dotnet watchmemancarkan karakter non-ASCII ke konsol, seperti yang ditunjukkan dalam contoh berikut:dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. 💡 Press "Ctrl + R" to restart. dotnet watch 🔧 Building... dotnet watch 🚀 Started dotnet watch ⌚ Exited dotnet watch ⏳ Waiting for a file to change before restarting dotnet...Pada host konsol tertentu, karakter ini mungkin tampak kacau. Untuk menghindari melihat karakter kacau, atur variabel ini ke
1atautrue.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSERSaat diatur ke
1atautrue,dotnet watchtidak akan meluncurkan atau merefresh browser untuk aplikasi web yang telahlaunchBrowserdikonfigurasi di launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISMSecara default,
dotnet watchmengoptimalkan build dengan menghindari operasi tertentu, seperti menjalankan pemulihan atau mengevaluasi kembali kumpulan file yang ditonton pada setiap perubahan file. Jika variabel ini diatur ke1atautrue, pengoptimalan ini dinonaktifkan.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLINGSaat diatur ke
1atautrue,dotnet watchtidak akan melakukan penanganan khusus untuk file konten statis.dotnet watchmengatur propertiDotNetWatchContentFilesMSBuild kefalse.DOTNET_WATCH_RESTART_ON_RUDE_EDITKetika diatur ke
1atautrue,dotnet watchakan selalu dimulai ulang pada pengeditan kasar alih-alih bertanya.
File yang ditonton secara default
dotnet watch mengawasi semua item dalam Watch grup item dalam file proyek. Secara default, grup ini menyertakan semua item dalam Compile grup dan EmbeddedResource .
dotnet watch juga memindai seluruh grafik referensi proyek dan mengawasi semua file dalam proyek tersebut.
Secara default, Compile grup dan EmbeddedResource menyertakan semua file yang cocok dengan pola glob berikut:
**/*.cs*.csproj**/*.resx- File konten di aplikasi web:
wwwroot/**
Secara default, file.config, dan .json tidak memicu mulai ulang dotnet watch karena sistem konfigurasi memiliki mekanismenya sendiri untuk menangani perubahan konfigurasi.
File dapat ditambahkan ke daftar tonton atau dihapus dari daftar dengan mengedit file proyek. File dapat ditentukan satu per satu atau dengan menggunakan pola glob.
Tonton file tambahan
Lebih banyak file dapat ditonton dengan menambahkan item ke Watch grup. Misalnya, markup berikut memperluas grup tersebut untuk menyertakan file JavaScript:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Abaikan file dan folder yang ditentukan
Watch="false" Gunakan atribut untuk mengabaikan file yang ditentukan.
DefaultItemExcludes Gunakan properti untuk mengabaikan folder atau file agar tidak diawasi.
Untuk mencegah dotnet watch menonton file, gunakan Compile item dan EmbeddedResource dengan Watch="false" atribut , seperti yang ditunjukkan dalam contoh berikut:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch mengabaikan referensi proyek yang memiliki Watch="false" atribut , seperti yang ditunjukkan dalam contoh berikut:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Mulai dari .NET 10, gunakan DefaultItemExcludes properti untuk mengecualikan seluruh folder atau pola file agar tidak ditonton oleh dotnet watch. Pendekatan ini berguna ketika Anda ingin mengecualikan file yang tidak relevan dengan kompilasi atau file yang memicu mulai ulang atau pemuatan ulang yang tidak diinginkan.
Misalnya, file di App_Data folder aplikasi ASP.NET Core mungkin berubah saat aplikasi berjalan, menyebabkan pemuatan ulang halaman yang tidak perlu. Kecualikan folder ini agar tidak diawasi:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**</DefaultItemExcludes>
</PropertyGroup>
Kecualikan beberapa pola dengan memisahkannya dengan titik koma:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**;**/temp/**;**/*.log</DefaultItemExcludes>
</PropertyGroup>
Properti DefaultItemExcludes memengaruhi semua jenis item default, seperti Compile dan EmbeddedResource. Atribut ini Watch="false" memberikan kontrol yang lebih baik atas file atau referensi proyek tertentu.
Untuk informasi selengkapnya, lihat referensi DefaultItemExcludes.
Konfigurasi tingkat lanjut
dotnet watch melakukan build design-time untuk menemukan item yang akan ditonton. Saat build ini dijalankan, dotnet watch atur properti DotNetWatchBuild=true. Properti ini dapat digunakan seperti yang ditunjukkan dalam contoh berikut:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Pemutakhiran Langsung
Mulai dari .NET 6 SDK, dotnet watch termasuk dukungan untuk isi ulang panas. Hot reload adalah fitur yang memungkinkan Anda menerapkan perubahan pada aplikasi yang sedang berjalan tanpa harus membangun kembali dan memulai ulang. Perubahannya mungkin pada file kode atau aset statis, seperti file lembar gaya dan file JavaScript. Fitur ini menyederhanakan pengalaman pengembangan lokal, karena memberikan umpan balik langsung saat Anda memodifikasi aplikasi.
Untuk informasi tentang jenis aplikasi dan versi .NET yang mendukung hot reload, lihat Kerangka kerja dan skenario aplikasi .NET yang didukung.
Pengeditan kasar
Saat file dimodifikasi, dotnet watch menentukan apakah aplikasi dapat dimuat ulang dengan panas. Jika tidak dapat dimuat ulang panas, perubahan disebut pengeditan kasar dan dotnet watch bertanya apakah Anda ingin menghidupkan ulang aplikasi:
dotnet watch ⌚ Unable to apply hot reload because of a rude edit.
❔ Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?
- Ya: Memulai ulang aplikasi.
- Tidak: Membiarkan aplikasi berjalan tanpa perubahan diterapkan.
- Selalu: Menghidupkan ulang aplikasi dan tidak meminta lagi untuk pengeditan yang kasar.
- Tidak Pernah: Membiarkan aplikasi berjalan tanpa perubahan diterapkan dan tidak meminta pengeditan kasar lagi.
Untuk informasi tentang jenis perubahan apa yang dianggap sebagai pengeditan kasar, lihat Mengedit kode dan melanjutkan penelusuran kesalahan dan Perubahan yang tidak didukung pada kode.
Untuk menonaktifkan pemuatan ulang panas saat Anda menjalankan dotnet watch, gunakan opsi , seperti yang --no-hot-reload ditunjukkan dalam contoh berikut:
dotnet watch --no-hot-reload
Examples
Jalankan
dotnet rununtuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watchAtau:
dotnet watch runJalankan
dotnet testuntuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watch testJalankan
dotnet run --project ./HelloWorld.csprojsetiap kali kode sumber berubah:dotnet watch run --project ./HelloWorld.csprojJalankan
dotnet run -- arg0untuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watch run -- arg0Atau:
dotnet watch -- run arg0