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 run
a 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 watch
můž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éhodotnet
souboru, například předdefinovaných příkazů rozhraní příkazového řádku a globálních nástrojů. Pokud můžete spustitdotnet <command>
, můžete spustitdotnet watch <command>
.V sadě .NET 8 SDK a novějších
dotnet watch
může běžetdotnet build
dotnet run
, nebodotnet test
. Zadejterun
,build
nebotest
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éhodotnet
procesu. Pokud používátedotnet 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 zdotnet restore
výstupu adotnet 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éhodotnet
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 nebotrue
,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 na1
všechny podřízené procesy, které spustí.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
dotnet watch
Mechanismus serveru aktualizace prohlížeče tuto hodnotu přečte, aby určil hostitelské prostředí WebSocket. Hodnota127.0.0.1
se nahrazujelocalhost
a schématahttp://
https://
jsou nahrazenaws://
awss://
v uvedeném pořadí.DOTNET_WATCH_ITERATION
dotnet watch
Nastaví tuto proměnnou1
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 nebotrue
,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 nebotrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Pokud je tato možnost nastavená
1
na hodnotu nebotrue
,dotnet watch
nespustí nebo neaktualizuje prohlížeče pro webové aplikace, které jsoulaunchBrowser
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á na1
hodnotu nebotrue
, tyto optimalizace jsou zakázány.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Pokud je nastavená hodnota
1
nebotrue
,dotnet watch
neudělá zvláštní zpracování souborů statického obsahu.dotnet watch
nastaví vlastnostDotNetWatchContentFiles
MSBuild nafalse
hodnotu .DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Pokud je nastavená hodnota
1
nebotrue
,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é
- Kurz: Vývoj aplikací ASP.NET Core pomocí sledovacího nástroje pro soubory
- Opětovné načítání za provozu v sadě Visual Studio
- Opětovné načítání podporovaných aplikací za provozu
- Změny podporovaného kódu 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