Lezen in het Engels

Delen via


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 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>
}

Argumenten

  • <command>

    In .NET 7 SDK en eerder dotnet watch kunt u elke opdracht uitvoeren die wordt verzonden via het dotnet uitvoerbare bestand, zoals ingebouwde CLI-opdrachten en globale hulpprogramma's. Als u kunt uitvoeren dotnet <command>, kunt u uitvoeren dotnet watch <command>.

    In .NET 8 SDK en hoger dotnet watch kunt u deze uitvoeren dotnet run, dotnet buildof dotnet test. Geef run, buildof test voor <command>.

    Als de onderliggende opdracht niet is opgegeven, is run de standaardwaarde voor dotnet run.

  • <forwarded arguments>

    Argumenten die worden opgegeven na een dubbel streepje (--) worden doorgegeven aan het onderliggende dotnet proces. Als u actief dotnet watch runbent, zijn deze argumenten opties voor dotnet-uitvoering. Als u werkt dotnet 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 van dotnet restore en dotnet 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 onderliggende dotnet 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 of true, 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 gebruikt DOTNET_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 op 1 alle onderliggende processen die worden gestart.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    Als onderdeel van het mechanisme van dotnet watchde browservernieuwingsserver wordt deze waarde gelezen om de WebSocket-hostomgeving te bepalen. De waarde 127.0.0.1 wordt vervangen door localhost, en de http:// en https:// schema's worden vervangen ws:// door respectievelijk wss:// .

  • DOTNET_WATCH_ITERATION

    dotnet watch stelt deze variabele in op 1 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 of true, 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 of true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Als dit is ingesteld op 1 of true, dotnet watch worden browsers niet gestart of vernieuwd voor web-apps die zijn launchBrowser 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 op 1 of true, worden deze optimalisaties uitgeschakeld.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Als deze instelling is ingesteld op 1 of true, dotnet watch wordt er geen speciale verwerking uitgevoerd voor statische inhoudsbestanden. dotnet watch stelt msBuild eigenschap DotNetWatchContentFiles in op false.

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Als dit is ingesteld op 1 of true, 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=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>

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
    

Zie ook