dotnet watch

Tento článek se týká sady ✔️ .NET Core 3.1 SDK a novějších verzí.

Name

dotnet watch – Restartuje nebo za provozu znovu načte zadanou aplikaci nebo spustí zadaný příkaz dotnet, když jsou zjištěny změny 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

Description

Příkaz dotnet watch je sledovací proces souborů. 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, za provozu se zadaná aplikace znovu načte. Pokud se změna nepodporuje, restartuje aplikaci. Tento proces umožňuje rychlý iterativní vývoj z příkazového řádku.

Při spuštění dotnet watchpříkazu můžete vynutit opětovné sestavení a restartování aplikace stisknutím kláves 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á skončí před stisknutím kláves Ctrl+R, nemá stisknutí Ctrl+R žádný vliv. V takovém případě dotnet watch ale soubory stále sleduje, a pokud se soubor aktualizuje, restartuje aplikaci.

Komprese odpovědí

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

warn: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]

V odpovědi nelze nakonfigurovat injektáž skriptu aktualizace prohlížeče. Příčinou může být odpověď Content-Encoding: "br". Zvažte zakázání komprese odpovědí.

Jako alternativu k zakázání komprese odpovědí ručně přidejte javascriptový odkaz aktualizace 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

    dotnet watch může spustit libovolný příkaz odeslaný prostřednictvím spustitelného dotnet souboru, jako jsou integrované příkazy rozhraní příkazového řádku a globální nástroje. Pokud můžete spustit dotnet <command>, můžete spustit dotnet watch <command>. Pokud podřízený příkaz není zadaný, výchozí hodnota je run pro dotnet run.

  • forwarded arguments

    Argumenty zadané za dvojitou pomlčkou (--) jsou předány podřízeného dotnet procesu. Pokud používáte , dotnet watch runjsou tyto argumenty možnostmi pro spuštění dotnet. Pokud používáte dotnet watch test, jsou tyto argumenty možnostmi pro dotnet test.

Možnosti

  • --list

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

  • --no-hot-reload

    Potlačit opětovné načítání za provozu u podporovaných aplikací.

  • --non-interactive

    Spustí se dotnet watch 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 aplikaci restartuje. K dispozici od sady .NET 7 SDK.

  • --project <PATH>

    Určuje cestu k souboru projektu, který se má spustit (pouze složka nebo včetně názvu souboru projektu). Pokud není zadaný, použije 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 se nepředá podřízeným příkazům. Například výstup z dotnet restore a dotnet run bude i nadále výstupem.

  • -v|--verbose

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

  • --version

    Zobrazuje verzi nástroje dotnet watch.

  • --

    Možnost s dvojitou pomlčkou (--) se dá použít k oddělení dotnet watch možností od argumentů, které budou předány podřízenému procesu. Jeho použití je volitelné. Pokud se možnost s dvojitou pomlčkou nepoužívá, dotnet watch považuje první nerozpoznaný argument za začátek argumentů, které by měl předat podřízenému 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 při dotnet watch spuštění aplikace a určuje pojmenovaný kanál.

  • DOTNET_USE_POLLING_FILE_WATCHER

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

  • DOTNET_WATCH

    dotnet watch nastaví tuto proměnnou na 1 u všech podřízených procesů, které spouští.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    Jako součást nástroje dotnet watchnačte mechanismus serveru aktualizace prohlížeče tuto hodnotu k určení hostitelského prostředí WebSocket. Hodnota 127.0.0.1 se nahradí hodnotou localhosta schémata http:// a https:// se nahradí ws:// za a wss:// v uvedeném pořadí.

  • DOTNET_WATCH_ITERATION

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

  • DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH

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

  • DOTNET_WATCH_SUPPRESS_EMOJIS

    Se sadou .NET SDK 6.0.300 a novějším dotnet watch generuje do konzoly jiné znaky 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 zdát zkomolené. Pokud se chcete vyhnout zobrazování zkomolených znaků, nastavte tuto proměnnou na 1 nebo true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Při nastavení na 1 nebo truedotnet watch se nespustí ani neaktualizuje prohlížeče pro webové aplikace, které jsou launchBrowser nakonfigurované v souboru launchSettings.json.

  • DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM

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

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Pokud je nastavená hodnota 1 nebo true, dotnet watch nebude provádět zvláštní zpracování souborů statického obsahu. dotnet watch nastaví vlastnost DotNetWatchContentFiles MSBuild na false.

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Při nastavení na 1 nebo truedotnet watch se při hrubých úpravách vždy restartuje, místo abyste se ptali.

Soubory sledované ve výchozím nastavení

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

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

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

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

Soubory můžete přidat do seznamu watch nebo je ze seznamu odebrat úpravou souboru projektu. Soubory lze zadat jednotlivě nebo pomocí vzorů globů.

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 položky a EmbeddedResource , 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 na projekt, 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>

Pokročilá konfigurace

dotnet watchprovede sestavení v době návrhu a vyhledá položky k watch. Při spuštění dotnet watch tohoto sestavení nastaví 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

Počínaje verzí .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 ve spuštěné aplikaci, aniž byste ji museli znovu sestavovat 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ách aplikace.

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

Hrubé úpravy

Při úpravě souboru určuje, dotnet watch jestli je možné aplikaci znovu načíst za provozu. Pokud se nedá znovu načíst za provozu, změna se nazývá hrubá úprava a dotnet watch zobrazí se dotaz, 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ž nevybízí k hrubým úpravám.
  • Nikdy: Nechá aplikaci spuštěnou bez použitých změn a už nebude zobrazovat výzvu k neslušné úpravě.

Informace o tom, jaké druhy změn se považují za hrubé úpravy, najdete v tématech Úprava kódu a pokračování v ladění a Nepodporované změny kódu.

Pokud chcete zakázat opětovné načítání za provozu při spuštění dotnet watchpříkazu , použijte --no-hot-reload 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 při každé změně zdrojového kódu:

    dotnet watch
    

    Nebo:

    dotnet watch run
    
  • Spusťte dotnet test projekt v aktuálním adresáři při každé změně zdrojového kódu:

    dotnet watch test
    
  • Spustit dotnet run --project ./HelloWorld.csproj při každé změně zdrojového kódu:

    dotnet watch run --project  ./HelloWorld.csproj
    
  • Spusťte dotnet run -- arg0 projekt v aktuálním adresáři při každé změně zdrojového kódu:

    dotnet watch run -- arg0
    

    Nebo:

    dotnet watch -- run arg0
    

Viz také