Sdílet prostřednictvím


dotnet watch

Tento článek se vztahuje na: ✔️ .NET Core 3.1 SDK a novější verze

Název

dotnet watch - Restartuje nebo znovu načte za provozu zadanou aplikaci nebo spustí zadaný příkaz dotnet při zjištění změn ve zdrojovém kódu.

Synopse

dotnet watch [<command>]
  [--list]
  [--no-hot-reload] [--non-interactive]
  [--project <PROJECT>]
  [-q|--quiet] [-v|--verbose]
  [--version]
  [--] <forwarded arguments> 

dotnet watch -?|-h|--help

Popis

Příkaz dotnet watch je sledovací proces souboru. Když zjistí změnu, spustí dotnet run příkaz nebo zadaný dotnet příkaz. Pokud se spustí dotnet runa změna se podporuje pro opětovné načítání za provozu, znovu načte za provozu za provozu zadanou aplikaci. Pokud tato změna není podporovaná, restartuje aplikaci. Tento proces umožňuje rychlý iterativní vývoj z příkazového řádku.

Při spuštění dotnet watchmůžete vynutit opětovné sestavení a restartování aplikace stisknutím ctrl+R v příkazovém prostředí. Tato funkce je dostupná jenom v době, kdy je aplikace spuštěná. Pokud například spustíte dotnet watch konzolovou aplikaci, která končí před stisknutím kombinace kláves Ctrl+R, stisknutí kombinace kláves Ctrl+R nemá žádný vliv. V takovém případě dotnet watch ale stále sleduje soubory a v případě aktualizace souboru aplikaci restartuje.

Komprese odpovědí

Pokud dotnet watch se spustí pro aplikaci, která používá kompresi odpovědí, nástroj nemůže vložit skript aktualizace prohlížeče. V rozhraní .NET 7 a novější verzi nástroje se zobrazí zpráva s upozorněním, jako je následující:

upozornění: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]

V odpovědi nelze nakonfigurovat injektáž skriptu aktualizace prohlížeče. Příčinou může být kódování obsahu odpovědi: br. Zvažte zakázání komprese odpovědí.

Jako alternativu k zakázání komprese odpovědí přidejte ručně odkaz na javascriptovou aktualizaci prohlížeče na stránky aplikace:

@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
    <script src="/_framework/aspnetcore-browser-refresh.js"></script>
}

Argumenty

  • <command>

    V sadě .NET 7 SDK a starších verzích můžete spustit libovolný příkaz, dotnet watch který je odeslán prostřednictvím spustitelného dotnet souboru, například předdefinovaných příkazů rozhraní příkazového řádku a globálních nástrojů. Pokud můžete spustit dotnet <command>, můžete spustit dotnet watch <command>.

    V sadě .NET 8 SDK a novějších dotnet watch může běžet dotnet builddotnet run, nebo dotnet test. Zadejte run, buildnebo test pro <command>.

    Pokud není zadaný podřízený příkaz, je run výchozí hodnota .dotnet run

  • <forwarded arguments>

    Argumenty zadané po dvojité pomlce (--) jsou předány podřízeného dotnet procesu. Pokud používáte dotnet watch run, jsou tyto argumenty možnostmi spuštění dotnet. Pokud používátedotnet watch test, jsou tyto argumenty možnostmi testu dotnet.

Možnosti

  • --list

    Zobrazí seznam všech zjištěných souborů bez spuštění sledovacího modulu.

  • --no-hot-reload

    Potlačit opětovné načítání za provozu pro podporované aplikace.

  • --non-interactive

    Spouští dotnet watch se v neinteraktivním režimu. Tuto možnost použijte, pokud chcete zabránit vyžádání vstupu konzoly. Když je povolené opětovné načítání za provozu a zjistí se hrubá úprava , dotnet watch restartuje aplikaci. K dispozici od sady .NET 7 SDK.

  • --project <PATH>

    Určuje cestu ke spuštění souboru projektu (pouze složka nebo včetně názvu souboru projektu). Pokud není zadaný, nastaví se jako výchozí aktuální adresář.

  • -q|--quiet

    Potlačí veškerý výstup vygenerovaný příkazem dotnet watch s výjimkou upozornění a chyb. Možnost není předána podřízeným příkazům. Například výstup z dotnet restore výstupu a dotnet run bude i nadále výstupem.

  • -v|--verbose

    Zobrazuje podrobný výstup pro ladění.

  • --version

    Zobrazuje verzi souboru dotnet watch.

  • --

    Možnost dvojité čárky (--) se dá použít k oddělení dotnet watch možností od argumentů, které se předají podřízenému procesu. Jeho použití je volitelné. Pokud se možnost dvojité čárky nepoužívá, dotnet watch považuje první nerozpoznaný argument za začátek argumentů, který by měl předat do podřízeného dotnet procesu.

Proměnné prostředí

dotnet watch používá následující proměnné prostředí:

  • DOTNET_HOTRELOAD_NAMEDPIPE_NAME

    Tato hodnota se konfiguruje dotnet watch při spuštění aplikace a určuje pojmenovaný kanál.

  • DOTNET_USE_POLLING_FILE_WATCHER

    Pokud je nastavena 1 hodnota nebo true, dotnet watch používá sledovací proces souboru dotazování místo System.IO.FileSystemWatcher. U některých systémů souborů, jako jsou síťové sdílené složky, připojené svazky Dockeru a jiné virtuální systémy souborů, se vyžaduje dotazování. Třída PhysicalFileProvider používá DOTNET_USE_POLLING_FILE_WATCHER k určení, zda PhysicalFileProvider.Watch metoda bude spoléhat na PollingFileChangeToken.

  • DOTNET_WATCH

    dotnet watch nastaví tuto proměnnou na 1 všechny podřízené procesy, které spustí.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    dotnet watchMechanismus serveru aktualizace prohlížeče tuto hodnotu přečte, aby určil hostitelské prostředí WebSocket. Hodnota 127.0.0.1 se nahrazuje localhosta schémata http://https:// jsou nahrazena ws:// a wss:// v uvedeném pořadí.

  • DOTNET_WATCH_ITERATION

    dotnet watch Nastaví tuto proměnnou 1 na a zvýší o jednu po každé změně souboru a příkaz restartuje nebo znovu načte aplikaci za provozu.

  • DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH

    Pokud je nastavená 1 hodnota nebo true, dotnet watch neaktualizuje prohlížeče, když zjistí změny souboru.

  • DOTNET_WATCH_SUPPRESS_EMOJIS

    Se sadou .NET SDK 6.0.300 a novější dotnet watch generují do konzoly znaky jiné než ASCII, jak je znázorněno v následujícím příkladu:

    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...
    

    U některých hostitelů konzoly se tyto znaky můžou zobrazovat zkomoleně. Chcete-li se vyhnout zobrazení zkomolených znaků, nastavte tuto proměnnou na 1 hodnotu nebo true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Pokud je tato možnost nastavená 1 na hodnotu nebo true, dotnet watch nespustí nebo neaktualizuje prohlížeče pro webové aplikace, které jsou launchBrowser nakonfigurované v launchSettings.json.

  • DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM

    Ve výchozím nastavení optimalizuje sestavení tím, dotnet watch že se vyhnete určitým operacím, například spuštěním obnovení nebo opětovným vyhodnocením sady sledovaných souborů při každé změně souboru. Pokud je tato proměnná nastavená na 1 hodnotu nebo true, tyto optimalizace jsou zakázány.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Pokud je nastavená hodnota 1 nebo true, dotnet watch neudělá zvláštní zpracování souborů statického obsahu. dotnet watch nastaví vlastnost DotNetWatchContentFiles MSBuild na falsehodnotu .

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Pokud je nastavená hodnota 1 nebo true, dotnet watch vždy se restartuje při hrubých úpravách, a nemusíte se ptát.

Soubory, které se ve výchozím nastavení sledují

dotnet watch sleduje všechny položky ve Watch skupině položek v souboru projektu. Ve výchozím nastavení zahrnuje tato skupina všechny položky v dané skupině Compile a EmbeddedResource skupiny. dotnet watch také zkontroluje celý graf odkazů na projekt a sleduje všechny soubory v rámci těchto projektů.

Ve výchozím nastavení obsahují všechny EmbeddedResource soubory odpovídající Compile následujícím vzorům globu:

  • **/*.cs
  • *.csproj
  • **/*.resx
  • Soubory obsahu ve webových aplikacích: wwwroot/**

Ve výchozím nastavení soubory .config a .json neaktivují restartování dotnet watch, protože konfigurační systém má vlastní mechanismy pro zpracování změn konfigurace.

Soubory lze přidat do seznamu kukátek nebo je ze seznamu odebrat úpravou souboru projektu. Soubory lze zadat jednotlivě nebo pomocí vzorů globu.

Sledování dalších souborů

Další soubory můžete sledovat přidáním položek do Watch skupiny. Například následující kód rozšiřuje tuto skupinu tak, aby zahrnovala soubory JavaScriptu:

<ItemGroup>
  <Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>

Ignorovat zadané soubory

dotnet watch bude ignorovat Compile a EmbeddedResource položky, které mají Watch="false" atribut, jak je znázorněno v následujícím příkladu:

<ItemGroup>
  <Compile Update="Generated.cs" Watch="false" />
  <EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>

dotnet watch bude ignorovat odkazy projektu, které mají Watch="false" atribut, jak je znázorněno v následujícím příkladu:

<ItemGroup>
  <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>

Rozšířená konfigurace

dotnet watch provede sestavení v době návrhu a vyhledá položky, které se mají sledovat. Při spuštění tohoto sestavení nastaví dotnet watch vlastnost DotNetWatchBuild=true. Tuto vlastnost lze použít, jak je znázorněno v následujícím příkladu:

<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
  <!-- only included in the project when dotnet-watch is running -->
</ItemGroup>

Opětovné načítání za provozu

Od verze .NET 6 dotnet watch zahrnuje podporu opětovného načítání za provozu. Opětovné načítání za provozu je funkce, která umožňuje použít změny spuštěné aplikace, aniž byste ji museli znovu sestavit a restartovat. Změny můžou být v souborech kódu nebo statických prostředcích, jako jsou soubory šablon stylů a soubory JavaScriptu. Tato funkce zjednodušuje místní vývojové prostředí, protože poskytuje okamžitou zpětnou vazbu při úpravě aplikace.

Informace o typech aplikací a verzích .NET, které podporují opětovné načítání za provozu, najdete v tématu Podporované architektury a scénáře aplikací .NET.

Rudé úpravy

Při změně souboru určuje, dotnet watch jestli se aplikace může znovu načíst za provozu. Pokud nejde znovu načíst za provozu, tato změna se nazývá hrubá úprava a dotnet watch zeptá se, jestli chcete aplikaci restartovat:

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)?
  • Ano: Restartuje aplikaci.
  • Ne: Ponechá aplikaci spuštěnou bez použitých změn.
  • Vždy: Restartuje aplikaci a už se nezobrazí výzva k hrubým úpravám.
  • Nikdy: Ponechá aplikaci spuštěnou bez použitých změn a už nebude zobrazovat výzvu k hrubým úpravám.

Informace o tom, jaké druhy změn jsou považovány za hrubé úpravy, naleznete v tématu Upravit kód a pokračovat v ladění a nepodporované změny kódu.

Pokud chcete při spuštění zakázat opětovné načítání za provozu dotnet watch, použijte --no-hot-reload tuto možnost, jak je znázorněno v následujícím příkladu:

dotnet watch --no-hot-reload 

Příklady

  • Spusťte dotnet run projekt v aktuálním adresáři pokaždé, když se změní zdrojový kód:

    dotnet watch
    

    Nebo:

    dotnet watch run
    
  • Spusťte dotnet test projekt v aktuálním adresáři pokaždé, když se změní zdrojový kód:

    dotnet watch test
    
  • Spusťte dotnet run --project ./HelloWorld.csproj pokaždé, když se změní zdrojový kód:

    dotnet watch run --project  ./HelloWorld.csproj
    
  • Spusťte dotnet run -- arg0 projekt v aktuálním adresáři pokaždé, když se změní zdrojový kód:

    dotnet watch run -- arg0
    

    Nebo:

    dotnet watch -- run arg0
    

Viz také