dotnet watch
Den här artikeln gäller för: ✔️ .NET Core 3.1 SDK och senare versioner
Name
dotnet watch
– Startar om eller laddar om det angivna programmet eller kör ett angivet dotnet-kommando när ändringar i källkoden identifieras.
Sammanfattning
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
beskrivning
Kommandot dotnet watch
är en filskådare. När en ändring identifieras körs dotnet run
kommandot eller ett angivet dotnet
kommando. Om den kör dotnet run
, och ändringen stöds för frekvent omläsning, läses det in på nytt för det angivna programmet. Om ändringen inte stöds startas programmet om. Den här processen möjliggör snabb iterativ utveckling från kommandoraden.
När du kör dotnet watch
kan du tvinga appen att återskapa och starta om genom att trycka på Ctrl+R i kommandogränssnittet. Den här funktionen är endast tillgänglig när appen körs. Om du till exempel kör dotnet watch
på en konsolapp som slutar innan du trycker på Ctrl+R har det ingen effekt att trycka på Ctrl+R. I så fall dotnet watch
tittar dock fortfarande filer och startar om appen om en fil uppdateras.
Svarskomprimering
Om dotnet watch
körs för en app som använder svarskomprimering kan verktyget inte mata in webbläsaruppdateringsskriptet. .NET 7 och senare version av verktyget visar ett varningsmeddelande som liknar följande:
warn: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Det går inte att konfigurera inmatning av webbläsaruppdateringsskript för svaret. Detta kan ha orsakats av svarets Content-Encoding: 'br'. Överväg att inaktivera svarskomprimering.
Som ett alternativ till att inaktivera svarskomprimering lägger du manuellt till JavaScript-referensen för webbläsaruppdatering till appens sidor:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Argument
<command>
I .NET 7 SDK och tidigare
dotnet watch
kan du köra alla kommandon som skickas via dendotnet
körbara filen, till exempel inbyggda CLI-kommandon och globala verktyg. Om du kan köradotnet <command>
kan du köradotnet watch <command>
.I .NET 8 SDK och senare
dotnet watch
kan du köradotnet run
,dotnet build
ellerdotnet test
. Angerun
,build
ellertest
för<command>
.Om det underordnade kommandot inte har angetts är
run
standardvärdet fördotnet run
.<forwarded arguments>
Argument som anges efter ett dubbelstreck (
--
) skickas till den underordnadedotnet
processen. Om du kördotnet watch run
är dessa argument alternativ för dotnet-körning. Om du kördotnet watch test
är dessa argument alternativ för dotnet-test.
Alternativ
--list
Visar en lista över alla identifierade filer utan att starta bevakaren.
--no-hot-reload
Förhindra frekvent omläsning för appar som stöds.
--non-interactive
Körs
dotnet watch
i icke-interaktivt läge. Använd det här alternativet för att förhindra att konsolindata begärs. När frekvent omläsning är aktiverat och en oförskämd redigering upptäcks startar dotnet watch om appen. Tillgänglig sedan .NET 7 SDK.--project <PATH>
Anger sökvägen till den projektfil som ska köras (endast mapp eller inklusive namnet på projektfilen). Om det inte anges används den aktuella katalogen som standard.
-q|--quiet
Undertrycker alla utdata som genereras av
dotnet watch
kommandot förutom varningar och fel. Alternativet skickas inte till underordnade kommandon. Till exempel utdata fråndotnet restore
ochdotnet run
fortsätter att vara utdata.-v|--verbose
Visar utförliga utdata för felsökning.
--version
Visar versionen av
dotnet watch
.--
Dubbelstrecksalternativet ('--') kan användas för att avgränsa
dotnet watch
alternativ från argument som skickas till den underordnade processen. Dess användning är valfri. När dubbelstrecksalternativet inte används anserdotnet watch
du att det första okända argumentet är början på argument som det ska skicka till den underordnadedotnet
processen.
Miljövariabler
dotnet watch
använder följande miljövariabler:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Det här värdet konfigureras av
dotnet watch
när appen ska startas och anger det namngivna röret.DOTNET_USE_POLLING_FILE_WATCHER
När det är inställt på
1
ellertrue
använderdotnet watch
använder en avsökningsfilsläsare System.IO.FileSystemWatcheri stället för . Avsökning krävs för vissa filsystem, till exempel nätverksresurser, Docker-monterade volymer och andra virtuella filsystem. Klassen PhysicalFileProvider använderDOTNET_USE_POLLING_FILE_WATCHER
för att avgöra om PhysicalFileProvider.Watch metoden förlitar sig på PollingFileChangeToken.DOTNET_WATCH
dotnet watch
anger den här variabeln till1
på alla underordnade processer som den startar.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Som en del av
dotnet watch
läser mekanismen för webbläsaruppdateringsserver det här värdet för att fastställa WebSocket-värdmiljön. Värdet127.0.0.1
ersätts avlocalhost
, och schemanahttp://
ochhttps://
ersätts medws://
wss://
respektive.DOTNET_WATCH_ITERATION
dotnet watch
anger den här variabeln till1
och ökar med en varje gång en fil ändras och kommandot startar om eller läser in programmet på nytt.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
När det är inställt på
1
ellertrue
dotnet watch
uppdateras inte webbläsare när filändringar identifieras.DOTNET_WATCH_SUPPRESS_EMOJIS
Med .NET SDK 6.0.300 och senare
dotnet watch
genererar icke-ASCII-tecken till konsolen, enligt följande exempel: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...
På vissa konsolvärdar kan dessa tecken verka förvrängda. Om du vill undvika att se förvrängda tecken anger du den här variabeln till
1
ellertrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
När värdet är inställt på eller , startar eller uppdaterar inte webbläsare för webbappar som har
launchBrowser
konfigurerats i launchSettings.json.dotnet watch
true
1
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Som standard
dotnet watch
optimerar bygget genom att undvika vissa åtgärder, till exempel att köra återställning eller utvärdera om uppsättningen övervakade filer vid varje filändring. Om den här variabeln är inställd på1
ellertrue
inaktiveras dessa optimeringar.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
När inställningen är inställd på
1
ellertrue
,dotnet watch
kommer inte att utföra särskild hantering för statiska innehållsfiler.dotnet watch
anger EGENSKAPENDotNetWatchContentFiles
MSBuild tillfalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
När det är inställt
1
på ellertrue
startasdotnet watch
alltid om vid oförskämda redigeringar i stället för att fråga.
Filer som övervakas som standard
dotnet watch
bevakar alla objekt i Watch
objektgruppen i projektfilen. Som standard innehåller den här gruppen alla objekt i Compile
grupperna och EmbeddedResource
. dotnet watch
söker också igenom hela diagrammet med projektreferenser och bevakar alla filer i dessa projekt.
Som standard Compile
innehåller grupperna och EmbeddedResource
alla filer som matchar följande globmönster:
**/*.cs
*.csproj
**/*.resx
- Innehållsfiler i webbappar:
wwwroot/**
Som standard utlöser .config och .json filer inte en omstart av dotnet watch eftersom konfigurationssystemet har sina egna mekanismer för att hantera konfigurationsändringar.
Filer kan läggas till i bevakningslistan eller tas bort från listan genom att redigera projektfilen. Filer kan anges individuellt eller med hjälp av globmönster.
Titta på ytterligare filer
Fler filer kan övervakas genom att lägga till objekt i Watch
gruppen. Följande markering utökar till exempel den gruppen till att omfatta JavaScript-filer:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Ignorera angivna filer
dotnet watch
ignorerar Compile
och EmbeddedResource
objekt som har Watch="false"
attributet, som visas i följande exempel:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch
ignorerar projektreferenser som har Watch="false"
attributet, som du ser i följande exempel:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Avancerad konfiguration
dotnet watch
utför en designtidsversion för att hitta objekt att titta på. När den här versionen körs dotnet watch
anger du egenskapen DotNetWatchBuild=true
. Den här egenskapen kan användas enligt följande exempel:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Snabb inläsning
Från och med .NET 6 dotnet watch
innehåller stöd för snabb inläsning. Frekvent omläsning är en funktion som gör att du kan tillämpa ändringar på en app som körs utan att behöva återskapa och starta om den. Ändringarna kan vara kodfiler eller statiska tillgångar, till exempel formatmallsfiler och JavaScript-filer. Den här funktionen effektiviserar den lokala utvecklingsupplevelsen eftersom den ger omedelbar feedback när du ändrar din app.
Information om apptyper och .NET-versioner som stöder frekvent omläsning finns i .NET-appramverk och scenarier som stöds.
Oförskämda redigeringar
När en fil ändras avgör dotnet watch
om appen kan läsas in på nytt. Om den inte kan läsas in på nytt kallas ändringen för en oförskämd redigering och dotnet watch
frågar om du vill starta om appen:
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)?
- Ja: Startar om appen.
- Nej: Lämnar appen igång utan att ändringarna tillämpas.
- Alltid: Startar om appen och frågar inte längre efter oförskämda redigeringar.
- Aldrig: Lämnar appen igång utan att ändringarna tillämpas och frågar inte längre efter oförskämda redigeringar.
Information om vilka typer av ändringar som anses vara oförskämda ändringar finns i Redigera kod och fortsätt felsökning och ändringar som inte stöds i kod.
Om du vill inaktivera snabb inläsning när du kör dotnet watch
använder --no-hot-reload
du alternativet , som du ser i följande exempel:
dotnet watch --no-hot-reload
Exempel
Kör
dotnet run
för projektet i den aktuella katalogen när källkoden ändras:dotnet watch
Eller:
dotnet watch run
Kör
dotnet test
för projektet i den aktuella katalogen när källkoden ändras:dotnet watch test
Kör
dotnet run --project ./HelloWorld.csproj
när källkoden ändras:dotnet watch run --project ./HelloWorld.csproj
Kör
dotnet run -- arg0
för projektet i den aktuella katalogen när källkoden ändras:dotnet watch run -- arg0
Eller:
dotnet watch -- run arg0