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 run
a 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 watch
pří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éhodotnet
souboru, jako jsou integrované příkazy rozhraní příkazového řádku a globální nástroje. Pokud můžete spustitdotnet <command>
, můžete spustitdotnet watch <command>
. Pokud podřízený příkaz není zadaný, výchozí hodnota jerun
prodotnet run
.forwarded arguments
Argumenty zadané za dvojitou pomlčkou (
--
) jsou předány podřízenéhodotnet
procesu. Pokud používáte ,dotnet watch run
jsou tyto argumenty možnostmi pro spuštění dotnet. Pokud používátedotnet 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 zdotnet restore
adotnet 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émudotnet
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
nebotrue
použijedotnet 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 .PollingFileChangeTokenDOTNET_WATCH
dotnet watch
nastaví tuto proměnnou na1
u všech podřízených procesů, které spouští.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Jako součást nástroje
dotnet watch
načte mechanismus serveru aktualizace prohlížeče tuto hodnotu k určení hostitelského prostředí WebSocket. Hodnota127.0.0.1
se nahradí hodnotoulocalhost
a schématahttp://
ahttps://
se nahradíws://
za awss://
v uvedeném pořadí.DOTNET_WATCH_ITERATION
dotnet watch
nastaví tuto proměnnou na1
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
nebotrue
,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
nebotrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Při nastavení na
1
nebotrue
dotnet watch
se nespustí ani neaktualizuje prohlížeče pro webové aplikace, které jsoulaunchBrowser
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á na1
hodnotu nebotrue
, jsou tyto optimalizace zakázané.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Pokud je nastavená hodnota
1
nebotrue
,dotnet watch
nebude provádět zvláštní zpracování souborů statického obsahu.dotnet watch
nastaví vlastnostDotNetWatchContentFiles
MSBuild nafalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Při nastavení na
1
nebotrue
dotnet 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 watch
provede 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 watch
pří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é
- Kurz: Vývoj aplikací ASP.NET Core pomocí sledovacího procesu souborů
- Opětovné načítání za provozu v sadě Visual Studio
- Podporované aplikace s opětovným načítáním za provozu
- Podporované změny kódu opětovného načítání za provozu
- Spuštění testu opětovného načítání za provozu
- Podpora opětovného načítání za provozu pro ASP.NET Core
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro