dotnet watch
Artikel ini berlaku untuk: ️ .NET Core 3.1 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>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Deskripsi
dotnet watch
Perintah adalah pengamat file. Saat mendeteksi perubahan, perintah atau perintah yang ditentukan dotnet
akan dijalankandotnet run
. Jika berjalan dotnet run
, dan perubahan didukung untuk hot reload, hot memuat ulang aplikasi yang ditentukan. Jika perubahan tidak didukung, perubahan akan memulai ulang aplikasi. Proses ini memungkinkan pengembangan berulang 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
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 memulai ulang aplikasi jika file diperbarui.
Pemadatan respons
Jika dotnet watch
berjalan untuk aplikasi yang menggunakan kompresi respons, alat ini tidak dapat menyuntikkan skrip refresh browser. Alat versi .NET 7 dan 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>
}
Argumen
command
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>
. Jika perintah anak tidak ditentukan, defaultnya adalahrun
untukdotnet run
.forwarded arguments
Argumen yang disediakan setelah tanda hubung ganda (
--
) diteruskan ke proses anakdotnet
. Jika Anda menjalankandotnet watch run
, argumen ini adalah opsi untuk dotnet run. Jika Anda menjalankandotnet watch test
, argumen ini adalah opsi untuk pengujian dotnet.
Opsi
--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 pemuatan ulang panas 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. Saat opsi tanda hubung ganda tidak digunakan,dotnet watch
pertimbangkan argumen pertama yang tidak dikenali sebagai awal argumen yang harus diteruskan ke proses turunandotnet
.
Variabel lingkungan
dotnet watch
menggunakan variabel lingkungan berikut:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Nilai ini dikonfigurasi oleh
dotnet watch
saat aplikasi akan diluncurkan, dan menentukan pipa bernama.DOTNET_USE_POLLING_FILE_WATCHER
Ketika 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 anak 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://
masing-masing diganti denganws://
danwss://
.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: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 rusak. Untuk menghindari melihat karakter yang rusak, 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 diawasi 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
, akan selalu menghidupkandotnet watch
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 menonton 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 dotnet watch menghidupkan ulang karena sistem konfigurasi memiliki mekanismenya sendiri untuk menangani perubahan konfigurasi.
File dapat ditambahkan ke daftar watch 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 yang ditentukan
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>
Konfigurasi lanjutan
dotnet watch
melakukan build design-time untuk menemukan item yang akan watch. Ketika build ini dijalankan, dotnet watch
mengatur 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>
Muat Ulang Panas
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.
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 memulai 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 pengeditan kasar lagi.
- 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
Contoh
Jalankan
dotnet run
untuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watch
Atau:
dotnet watch run
Jalankan
dotnet test
untuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watch test
Jalankan
dotnet run --project ./HelloWorld.csproj
setiap kali kode sumber berubah:dotnet watch run --project ./HelloWorld.csproj
Jalankan
dotnet run -- arg0
untuk proyek di direktori saat ini setiap kali kode sumber berubah:dotnet watch run -- arg0
Atau:
dotnet watch -- run arg0
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk