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 melalui dotnet executable, seperti perintah CLI bawaan dan alat global. Jika Anda dapat menjalankan dotnet <command>, Anda dapat menjalankan dotnet watch <command>. Jika perintah anak tidak ditentukan, defaultnya adalah run untuk dotnet run.

  • forwarded arguments

    Argumen yang disediakan setelah tanda hubung ganda (--) diteruskan ke proses anak dotnet . Jika Anda menjalankan dotnet watch run, argumen ini adalah opsi untuk dotnet run. Jika Anda menjalankan dotnet 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 dari dotnet restore dan dotnet 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 turunan dotnet .

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 atau true, 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 ke 1 pada semua proses anak yang diluncurkannya.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    Sebagai bagian dotnet watchdari , mekanisme server refresh browser membaca nilai ini untuk menentukan lingkungan host WebSocket. Nilai 127.0.0.1 digantikan oleh localhost, dan http:// skema dan https:// masing-masing diganti dengan ws:// dan wss:// .

  • DOTNET_WATCH_ITERATION

    dotnet watch mengatur variabel ini ke 1 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 atau true, 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 atau true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Saat diatur ke 1 atau true, dotnet watch tidak akan meluncurkan atau merefresh browser untuk aplikasi web yang telah launchBrowser 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 ke 1 atau true, pengoptimalan ini dinonaktifkan.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Saat diatur ke 1 atau true, dotnet watch tidak akan melakukan penanganan khusus untuk file konten statis. dotnet watch mengatur properti DotNetWatchContentFiles MSBuild ke false.

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Ketika diatur ke 1 atau true, akan selalu menghidupkan dotnet 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 watchmelakukan 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