Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel is van toepassing op: ✔️ .NET 6 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>]
[--artifacts-path <ARTIFACTS_DIR>] [--disable-build-servers]
[--list] [--no-hot-reload] [--no-self-contained]
[--non-interactive] [--project <PROJECT>] [--sc|--self-contained]
[-q|--quiet] [-v|--verbose] [--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Description
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 runen 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 watchkunt 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>
}
Arguments
<command>In .NET 7 SDK en eerder
dotnet watchkunt u elke opdracht uitvoeren die wordt verzonden via hetdotnetuitvoerbare 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 watchkunt u deze uitvoerendotnet run,dotnet buildofdotnet test. Geefrun,buildoftestvoor<command>.Als de onderliggende opdracht niet is opgegeven, is
runde standaardwaarde voordotnet run.<forwarded arguments>Argumenten die worden opgegeven na een dubbel streepje (
--) worden doorgegeven aan het onderliggendedotnetproces. Als u actiefdotnet watch runbent, zijn deze argumenten opties voor dotnet-uitvoering. Als u werktdotnet watch test, zijn deze argumenten opties voor dotnet-test.
Options
-
--artifacts-path <ARTIFACTS_DIR>Alle builduitvoerbestanden van de uitgevoerde opdracht worden weergegeven in submappen onder het opgegeven pad, gescheiden door project. Zie De indeling Artefacten-uitvoer voor meer informatie. Beschikbaar sinds .NET 8 SDK.
-
--disable-build-serversHiermee wordt de opdracht gedwongen om permanente buildservers te negeren. Deze optie biedt een consistente manier om al het gebruik van buildcaching uit te schakelen, waardoor een volledig nieuwe build wordt afgemaakt. Een build die niet afhankelijk is van caches is handig wanneer de caches om een of andere reden beschadigd of onjuist zijn. Beschikbaar sinds .NET 7 SDK.
--listGeeft een lijst weer van alle gedetecteerde bestanden zonder de watcher te starten.
-
--no-self-containedPubliceer uw toepassing als een frameworkafhankelijke toepassing. Er moet een compatibele .NET-runtime worden geïnstalleerd op de doelcomputer om uw toepassing uit te voeren.
--no-hot-reloadDynamische herload voor ondersteunde apps onderdrukken.
--non-interactiveWordt uitgevoerd
dotnet watchin 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.
-
--sc|--self-containedPubliceer de .NET-runtime met uw toepassing, zodat de runtime niet hoeft te worden geïnstalleerd op de doelcomputer.
-q|--quietOnderdrukt alle uitvoer die wordt gegenereerd door de
dotnet watchopdracht, behalve waarschuwingen en fouten. De optie wordt niet doorgegeven aan onderliggende opdrachten. Uitvoer vandotnet restoreendotnet runblijft bijvoorbeeld uitvoer.-v|--verboseToont uitgebreide uitvoer voor foutopsporing.
--versionToont de versie van
dotnet watch.--De optie met dubbele streepjes ('--') kan worden gebruikt om opties te scheiden
dotnet watchvan argumenten die worden doorgegeven aan het onderliggende proces. Het gebruik ervan is optioneel. Wanneer de optie voor dubbele streepjes niet wordt gebruikt,dotnet watchwordt het eerste niet-herkende argument beschouwd als het begin van de argumenten die moeten worden doorgegeven aan het onderliggendedotnetproces.-
-?|-h|--helpHiermee wordt een beschrijving afgedrukt van hoe de opdracht gebruikt moet worden.
Omgevingsvariabelen
dotnet watch maakt gebruik van de volgende omgevingsvariabelen:
DOTNET_HOTRELOAD_NAMEDPIPE_NAMEDeze waarde wordt geconfigureerd
dotnet watchwanneer de app moet worden gestart en de benoemde pijp wordt opgegeven.DOTNET_USE_POLLING_FILE_WATCHERAls dit is ingesteld op
1oftrue,dotnet watchgebruikt 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_WATCHERom te bepalen of de PhysicalFileProvider.Watch methode afhankelijk is van de PollingFileChangeToken.DOTNET_WATCHdotnet watchstelt deze variabele in op1alle onderliggende processen die worden gestart.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAMEAls onderdeel van het mechanisme van
dotnet watchde browservernieuwingsserver wordt deze waarde gelezen om de WebSocket-hostomgeving te bepalen. De waarde127.0.0.1wordt vervangen doorlocalhost, en dehttp://enhttps://schema's worden vervangenws://door respectievelijkwss://.DOTNET_WATCH_ITERATIONdotnet watchstelt deze variabele in op1en 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_REFRESHAls dit is ingesteld op
1oftrue,dotnet watchworden browsers niet vernieuwd wanneer bestandswijzigingen worden gedetecteerd.DOTNET_WATCH_SUPPRESS_EMOJISMet de .NET SDK 6.0.300 en hoger
dotnet watchworden 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
1in op oftrue.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSERAls dit is ingesteld op
1oftrue,dotnet watchworden browsers voor web-apps die zijnlaunchBrowsergeconfigureerd in launchSettings.json, niet gestart of vernieuwd.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISMOptimaliseert de build standaard
dotnet watchdoor 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 op1oftrue, worden deze optimalisaties uitgeschakeld.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLINGAls deze instelling is ingesteld op
1oftrue,dotnet watchwordt er geen speciale verwerking uitgevoerd voor statische inhoudsbestanden.dotnet watchstelt msBuild eigenschapDotNetWatchContentFilesin opfalse.DOTNET_WATCH_RESTART_ON_RUDE_EDITAls dit is ingesteld op
1oftrue,dotnet watchwordt 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 en mappen negeren
Gebruik het Watch="false" kenmerk om opgegeven bestanden te negeren. Gebruik de DefaultItemExcludes eigenschap om mappen of bestanden te negeren die niet worden bekeken.
Als u wilt voorkomen dat dotnet watch u bestanden bekijkt, gebruikt u de 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>
Vanaf .NET 10 gebruikt u de DefaultItemExcludes eigenschap om volledige mappen of bestandspatronen uit te sluiten van het bekijken door dotnet watch. Deze methode is handig als u bestanden wilt uitsluiten die niet relevant zijn voor compilatie of bestanden die ongewenste herstarts of opnieuw laden activeren.
Bestanden in de App_Data map van ASP.NET Core-toepassingen kunnen bijvoorbeeld veranderen terwijl de app wordt uitgevoerd, waardoor onnodige pagina's opnieuw worden geladen. Sluit deze map uit om te worden bekeken:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**</DefaultItemExcludes>
</PropertyGroup>
Sluit meerdere patronen uit door ze te scheiden met puntkomma's:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**;**/temp/**;**/*.log</DefaultItemExcludes>
</PropertyGroup>
De DefaultItemExcludes eigenschap is van invloed op alle standaarditemtypen, zoals Compile en EmbeddedResource. Het Watch="false" kenmerk biedt een nauwkeurigere controle over specifieke bestanden of projectverwijzingen.
Zie de referentie DefaultItemExcludes voor meer informatie.
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=truein. 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>
Onmiddellijk Herladen
Vanaf .NET 6 SDK dotnet watch bevat 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 runvoor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watchOf:
dotnet watch runUitvoeren
dotnet testvoor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watch testUitvoeren
dotnet run --project ./HelloWorld.csprojwanneer de broncode wordt gewijzigd:dotnet watch run --project ./HelloWorld.csprojUitvoeren
dotnet run -- arg0voor het project in de huidige map wanneer de broncode wordt gewijzigd:dotnet watch run -- arg0Of:
dotnet watch -- run arg0