dotnet watch
Dit artikel is van toepassing op: âī¸ .NET Core 3.1 SDK en latere versies
Naam
dotnet watch
- Start de opgegeven toepassing opnieuw of laadt de opgegeven toepassing opnieuw of voert een opgegeven dotnet-opdracht uit wanneer wijzigingen in de broncode worden gedetecteerd.
Samenvatting
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Beschrijving
De dotnet watch
opdracht is een file watcher. Wanneer een wijziging wordt gedetecteerd, wordt de dotnet run
opdracht of een opgegeven dotnet
opdracht uitgevoerd. Als deze wordt uitgevoerd dotnet run
en de wijziging wordt ondersteund voor het opnieuw laden van dynamische bestanden, wordt de opgegeven toepassing opnieuw geladen. Als de wijziging niet wordt ondersteund, wordt de toepassing opnieuw gestart. Dit proces maakt snelle iteratieve ontwikkeling mogelijk vanaf de opdrachtregel.
Tijdens het uitvoeren dotnet watch
kunt u afdwingen dat de app opnieuw wordt opgebouwd en opnieuw wordt opgestart door in de opdrachtshell op Ctrl+R te drukken. Deze functie is alleen beschikbaar wanneer de app wordt uitgevoerd. Als u bijvoorbeeld uitvoert dotnet watch
op een console-app die eindigt voordat u op Ctrl+R drukt, heeft het drukken op Ctrl+R geen effect. In dat geval dotnet watch
kijkt u echter nog steeds naar bestanden en start u de app opnieuw op als een bestand wordt bijgewerkt.
Antwoordcompressie
Als dotnet watch
deze wordt uitgevoerd voor een app die gebruikmaakt van antwoordcompressie, kan het hulpprogramma het vernieuwingsscript van de browser niet injecteren. In de .NET 7- en latere versie van het hulpprogramma wordt een waarschuwingsbericht weergegeven dat er als volgt uitziet:
waarschuwen: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Kan de scriptinjectie van het browservernieuwingsscript niet configureren voor het antwoord. Dit kan zijn veroorzaakt door de Content-Encoding van het antwoord: 'br'. Overweeg om antwoordcompressie uit te schakelen.
Als alternatief voor het uitschakelen van antwoordcompressie voegt u handmatig de JavaScript-verwijzing voor het vernieuwen van de browser toe aan de pagina's van de app:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Argumenten
<command>
In .NET 7 SDK en eerder
dotnet watch
kunt u elke opdracht uitvoeren die wordt verzonden via hetdotnet
uitvoerbare bestand, zoals ingebouwde CLI-opdrachten en globale hulpprogramma's. Als u kunt uitvoerendotnet <command>
, kunt u uitvoerendotnet watch <command>
.In .NET 8 SDK en hoger
dotnet watch
kunt u deze uitvoerendotnet run
,dotnet build
ofdotnet test
. Geefrun
,build
oftest
voor<command>
.Als de onderliggende opdracht niet is opgegeven, is
run
de standaardwaarde voordotnet run
.<forwarded arguments>
Argumenten die worden opgegeven na een dubbel streepje (
--
) worden doorgegeven aan het onderliggendedotnet
proces. Als u actiefdotnet watch run
bent, zijn deze argumenten opties voor dotnet-uitvoering. Als u werktdotnet watch test
, zijn deze argumenten opties voor dotnet-test.
Opties
--list
Geeft een lijst weer van alle gedetecteerde bestanden zonder de watcher te starten.
--no-hot-reload
Dynamische herload voor ondersteunde apps onderdrukken.
--non-interactive
Wordt uitgevoerd
dotnet watch
in niet-interactieve modus. Gebruik deze optie om te voorkomen dat consoleinvoer wordt aangevraagd. Wanneer dynamisch opnieuw laden is ingeschakeld en er een onbeleefde bewerking wordt gedetecteerd, start dotnet watch de app opnieuw op. Beschikbaar sinds .NET 7 SDK.--project <PATH>
Hiermee geeft u het pad op van het projectbestand dat moet worden uitgevoerd (alleen map of inclusief de naam van het projectbestand). Als dit niet is opgegeven, wordt deze standaard ingesteld op de huidige map.
-q|--quiet
Onderdrukt alle uitvoer die wordt gegenereerd door de
dotnet watch
opdracht, behalve waarschuwingen en fouten. De optie wordt niet doorgegeven aan onderliggende opdrachten. Uitvoer vandotnet restore
endotnet run
blijft bijvoorbeeld uitvoer.-v|--verbose
Toont uitgebreide uitvoer voor foutopsporing.
--version
Toont de versie van
dotnet watch
.--
De optie met dubbele streepjes ('--') kan worden gebruikt om opties te scheiden
dotnet watch
van argumenten die worden doorgegeven aan het onderliggende proces. Het gebruik ervan is optioneel. Wanneer de optie voor dubbele streepjes niet wordt gebruikt,dotnet watch
wordt het eerste niet-herkende argument beschouwd als het begin van de argumenten die moeten worden doorgegeven aan het onderliggendedotnet
proces.
Omgevingsvariabelen
dotnet watch
maakt gebruik van de volgende omgevingsvariabelen:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Deze waarde wordt geconfigureerd
dotnet watch
wanneer de app moet worden gestart en de benoemde pijp wordt opgegeven.DOTNET_USE_POLLING_FILE_WATCHER
Als dit is ingesteld op
1
oftrue
,dotnet watch
gebruikt u een polling file watcher in plaats van System.IO.FileSystemWatcher. Polling is vereist voor sommige bestandssystemen, zoals netwerkshares, gekoppelde Docker-volumes en andere virtuele bestandssystemen. De PhysicalFileProvider klasse gebruiktDOTNET_USE_POLLING_FILE_WATCHER
om te bepalen of de PhysicalFileProvider.Watch methode afhankelijk is van de PollingFileChangeToken.DOTNET_WATCH
dotnet watch
stelt deze variabele in op1
alle onderliggende processen die worden gestart.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Als onderdeel van het mechanisme van
dotnet watch
de browservernieuwingsserver wordt deze waarde gelezen om de WebSocket-hostomgeving te bepalen. De waarde127.0.0.1
wordt vervangen doorlocalhost
, en dehttp://
enhttps://
schema's worden vervangenws://
door respectievelijkwss://
.DOTNET_WATCH_ITERATION
dotnet watch
stelt deze variabele in op1
en wordt met ÊÊn verhoogd telkens wanneer een bestand wordt gewijzigd en de opdracht wordt opnieuw opgestart of de toepassing opnieuw wordt geladen.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
Als dit is ingesteld op
1
oftrue
,dotnet watch
worden browsers niet vernieuwd wanneer bestandswijzigingen worden gedetecteerd.DOTNET_WATCH_SUPPRESS_EMOJIS
Met de .NET SDK 6.0.300 en hoger
dotnet watch
worden niet-ASCII-tekens verzonden naar de console, zoals wordt weergegeven in het volgende voorbeeld: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...
Op bepaalde consolehosts kunnen deze tekens vervormd worden weergegeven. Als u wilt voorkomen dat vervormde tekens worden weergegeven, stelt u deze variabele
1
in op oftrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Als dit is ingesteld op
1
oftrue
,dotnet watch
worden browsers niet gestart of vernieuwd voor web-apps die zijnlaunchBrowser
geconfigureerd in launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Optimaliseert de build standaard
dotnet watch
door bepaalde bewerkingen te voorkomen, zoals het uitvoeren van herstel of het opnieuw evalueren van de set bekeken bestanden bij elke bestandswijziging. Als deze variabele is ingesteld op1
oftrue
, worden deze optimalisaties uitgeschakeld.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Als deze instelling is ingesteld op
1
oftrue
,dotnet watch
wordt er geen speciale verwerking uitgevoerd voor statische inhoudsbestanden.dotnet watch
stelt msBuild eigenschapDotNetWatchContentFiles
in opfalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Als dit is ingesteld op
1
oftrue
,dotnet watch
wordt altijd opnieuw gestart bij onbeleefde bewerkingen in plaats van te vragen.
Bestanden die standaard worden bekeken
dotnet watch
bekijkt alle items in de Watch
itemgroep in het projectbestand. Deze groep bevat standaard alle items in de Compile
en EmbeddedResource
groepen. dotnet watch
scant ook de volledige grafiek met projectverwijzingen en bekijkt alle bestanden in die projecten.
Standaard bevatten de Compile
en EmbeddedResource
groepen alle bestanden die overeenkomen met de volgende globpatronen:
**/*.cs
*.csproj
**/*.resx
- Inhoudsbestanden in web-apps:
wwwroot/**
Standaard activeren .config- en .json-bestanden geen dotnet-horloge opnieuw opstarten omdat het configuratiesysteem zijn eigen mechanismen heeft voor het afhandelen van configuratiewijzigingen.
Bestanden kunnen worden toegevoegd aan de controlelijst of uit de lijst worden verwijderd door het projectbestand te bewerken. Bestanden kunnen afzonderlijk worden opgegeven of door globpatronen te gebruiken.
Aanvullende bestanden bekijken
Er kunnen meer bestanden worden bekeken door items toe te voegen aan de Watch
groep. Met de volgende markeringen wordt bijvoorbeeld die groep uitgebreid om JavaScript-bestanden op te nemen:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Opgegeven bestanden negeren
dotnet watch
negeert Compile
en EmbeddedResource
items met het Watch="false"
kenmerk, zoals wordt weergegeven in het volgende voorbeeld:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch
negeert projectverwijzingen met het Watch="false"
kenmerk, zoals wordt weergegeven in het volgende voorbeeld:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Geavanceerde configuratie
dotnet watch
voert een ontwerptijd-build uit om items te vinden die moeten worden bekeken. Wanneer deze build wordt uitgevoerd, dotnet watch
stelt u de eigenschap DotNetWatchBuild=true
in. Deze eigenschap kan worden gebruikt zoals wordt weergegeven in het volgende voorbeeld:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Dynamisch opnieuw laden
Vanaf .NET 6 bevat dotnet watch
ondersteuning voor het opnieuw laden van hotloads. Hot reload is een functie waarmee u wijzigingen kunt toepassen op een actieve app zonder dat u deze opnieuw hoeft op te bouwen en opnieuw te starten. De wijzigingen kunnen betrekking hebben op codebestanden of statische assets, zoals opmaakmodellen en JavaScript-bestanden. Deze functie stroomlijnt de lokale ontwikkelervaring, omdat deze direct feedback geeft wanneer u uw app wijzigt.
Zie Ondersteunde .NET-app-frameworks en -scenario's voor meer informatie over app-typen en .NET-versies die ondersteuning bieden voor hot-reload.
Onbeleefde bewerkingen
Wanneer een bestand wordt gewijzigd, dotnet watch
bepaalt u of de app dynamisch kan worden geladen. Als deze niet opnieuw kan worden geladen, wordt de wijziging een onbeleefde bewerking genoemd en dotnet watch
wordt u gevraagd of u de app opnieuw wilt starten:
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: Start de app opnieuw op.
- Nee: laat de app actief zonder dat de wijzigingen zijn toegepast.
- Altijd: start de app opnieuw op en vraagt niet meer om onbeleefde bewerkingen.
- Nooit: Laat de app actief zonder dat de wijzigingen zijn toegepast en vraagt niet meer om onbeleefde bewerkingen.
Zie Code bewerken en doorgaan met foutopsporing en niet-ondersteunde wijzigingen in code voor informatie over welke soorten wijzigingen als onbeleefde bewerkingen worden beschouwd.
Als u hot reload wilt uitschakelen wanneer u uitvoert dotnet watch
, gebruikt u de --no-hot-reload
optie, zoals wordt weergegeven in het volgende voorbeeld:
dotnet watch --no-hot-reload
Voorbeelden
Uitvoeren
dotnet run
voor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watch
Of:
dotnet watch run
Uitvoeren
dotnet test
voor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watch test
Uitvoeren
dotnet run --project ./HelloWorld.csproj
wanneer de broncode wordt gewijzigd:dotnet watch run --project ./HelloWorld.csproj
Uitvoeren
dotnet run -- arg0
voor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watch run -- arg0
Of:
dotnet watch -- run arg0