dotnet watch
Artikel ini berlaku untuk: ✔️ .NET Core 3.1 SDK dan versi yang lebih baru
dotnet watch
- Menghidupkan ulang atau hot memuat ulang aplikasi yang ditentukan, atau menjalankan perintah dotnet tertentu, ketika perubahan kode sumber terdeteksi.
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
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.
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>
}
<command>
Di .NET 7 SDK dan yang lebih lama,
dotnet watch
dapat menjalankan perintah apa pun yang dikirim melaluidotnet
executable, 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 watch
dapat menjalankandotnet run
, ,dotnet build
ataudotnet test
. Tentukanrun
,build
, atautest
untuk<command>
.Jika perintah turunan tidak ditentukan, defaultnya adalah
run
untukdotnet 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.
--list
Mencantumkan semua file yang ditemukan tanpa memulai pengamat.
--no-hot-reload
Tekan hot reload untuk aplikasi yang didukung.
--non-interactive
dotnet watch
Berjalan 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.
-q|--quiet
Menekan semua output yang dihasilkan oleh
dotnet watch
perintah kecuali peringatan dan kesalahan. Opsi tidak diteruskan ke perintah turunan. Misalnya, output daridotnet restore
dandotnet run
terus menjadi output.-v|--verbose
Menampilkan output verbose untuk penelusuran kesalahan.
--version
Memperlihatkan versi
dotnet watch
.--
Opsi tanda hubung ganda ('--') dapat digunakan untuk memisahkan
dotnet watch
opsi dari argumen yang akan diteruskan ke proses anak. Penggunaannya bersifat opsional. Ketika opsi tanda hubung ganda tidak digunakan,dotnet watch
pertimbangkan argumen pertama yang tidak dikenali sebagai awal argumen yang harus diteruskan ke proses turunandotnet
.
dotnet watch
menggunakan variabel lingkungan berikut:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Nilai ini dikonfigurasi oleh
dotnet watch
ketika aplikasi akan diluncurkan, dan menentukan pipa bernama.DOTNET_USE_POLLING_FILE_WATCHER
Saat diatur ke
1
atautrue
,dotnet watch
menggunakan 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 mengandalkan PhysicalFileProvider.WatchPollingFileChangeToken.DOTNET_USE_POLLING_FILE_WATCHER
DOTNET_WATCH
dotnet watch
mengatur variabel ini ke1
pada semua proses turunan yang diluncurkannya.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Sebagai bagian
dotnet watch
dari , mekanisme server refresh browser membaca nilai ini untuk menentukan lingkungan host WebSocket. Nilai127.0.0.1
digantikan olehlocalhost
, danhttp://
skema danhttps://
diganti denganws://
danwss://
masing-masing.DOTNET_WATCH_ITERATION
dotnet watch
mengatur variabel ini ke1
dan bertambah satu per satu setiap kali file diubah dan perintah dimulai ulang atau panas memuat ulang aplikasi.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
Saat diatur ke
1
atautrue
,dotnet watch
tidak akan menyegarkan browser saat mendeteksi perubahan file.DOTNET_WATCH_SUPPRESS_EMOJIS
Dengan .NET SDK 6.0.300 dan yang lebih baru,
dotnet watch
memancarkan karakter non-ASCII ke konsol, seperti yang ditunjukkan dalam contoh berikut:Outputdotnet 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
1
atautrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Saat diatur ke
1
atautrue
,dotnet watch
tidak akan meluncurkan atau merefresh browser untuk aplikasi web yang telahlaunchBrowser
dikonfigurasi di launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Secara default,
dotnet watch
mengoptimalkan build dengan menghindari operasi tertentu, seperti menjalankan pemulihan atau mengevaluasi kembali kumpulan file yang ditonton pada setiap perubahan file. Jika variabel ini diatur ke1
atautrue
, pengoptimalan ini dinonaktifkan.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Saat diatur ke
1
atautrue
,dotnet watch
tidak akan melakukan penanganan khusus untuk file konten statis.dotnet watch
mengatur propertiDotNetWatchContentFiles
MSBuild kefalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Ketika diatur ke
1
atautrue
,dotnet watch
akan selalu dimulai ulang pada pengeditan kasar alih-alih bertanya.
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.
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>
dotnet watch
akan mengabaikan Compile
dan EmbeddedResource
item yang memiliki 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
akan mengabaikan referensi proyek yang memiliki Watch="false"
atribut , seperti yang ditunjukkan dalam contoh berikut:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
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>
Mulai dari .NET 6, 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.
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
Jalankan
dotnet run
untuk proyek di direktori saat ini setiap kali kode sumber berubah:.NET CLIdotnet watch
Atau:
.NET CLIdotnet watch run
Jalankan
dotnet test
untuk proyek di direktori saat ini setiap kali kode sumber berubah:.NET CLIdotnet watch test
Jalankan
dotnet run --project ./HelloWorld.csproj
setiap kali kode sumber berubah:.NET CLIdotnet watch run --project ./HelloWorld.csproj
Jalankan
dotnet run -- arg0
untuk proyek di direktori saat ini setiap kali kode sumber berubah:.NET CLIdotnet watch run -- arg0
Atau:
.NET CLIdotnet watch -- run arg0
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: