Teilen über


dotnet watch

Dieser Artikel gilt für: ✔️ .NET 6 SDK und höhere Versionen

Name

dotnet watch - Startet die angegebene Anwendung neu oder lädt die angegebene Anwendung neu, oder führt einen angegebenen Dotnet-Befehl aus, wenn Änderungen im Quellcode erkannt werden.

Zusammenfassung

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

Der dotnet watch Befehl ist ein Dateiüberwachungsprogramm. Wenn eine Änderung erkannt wird, wird der dotnet run Befehl oder ein angegebener dotnet Befehl ausgeführt. Wenn sie ausgeführt dotnet runwird und die Änderung beim heißen Erneutladen unterstützt wird, wird die angegebene Anwendung erneut geladen. Wenn die Änderung nicht unterstützt wird, wird die Anwendung neu gestartet. Dieser Prozess ermöglicht eine schnelle iterative Entwicklung über die Befehlszeile.

Während der Ausführung dotnet watchkönnen Sie erzwingen, dass die App neu erstellt und neu gestartet wird, indem Sie STRG+R in der Befehlsshell drücken. Dieses Feature ist nur verfügbar, wenn die App ausgeführt wird. Wenn Sie beispielsweise auf einer Konsolen-App ausgeführt werden dotnet watch , die endet, bevor Sie STRG+R drücken, hat das Drücken von STRG+R keine Auswirkung. In diesem Fall dotnet watch werden jedoch weiterhin Dateien überwacht und die App neu gestartet, wenn eine Datei aktualisiert wird.

Antwortkomprimierung

Wenn dotnet watch sie für eine App ausgeführt wird, die die Antwortkomprimierung verwendet, kann das Tool das Browseraktualisierungsskript nicht einfügen. Die .NET 7- und höher-Version des Tools zeigt eine Warnmeldung wie folgt an:

warn: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]

Die Browseraktualisierungsskripteinfügung kann in der Antwort nicht konfiguriert werden. Dies wurde möglicherweise durch die Inhaltscodierung der Antwort verursacht: 'br'. Erwägen Sie das Deaktivieren der Reaktionskomprimierung.

Als Alternative zum Deaktivieren der Reaktionskomprimierung fügen Sie den JavaScript-Verweis des Browsers manuell auf die Seiten der App hinzu:

@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
    <script src="/_framework/aspnetcore-browser-refresh.js"></script>
}

Arguments

  • <command>

    In .NET 7 SDK und früheren Versionen kann jeder Befehl ausgeführt werden, dotnet watch der über die dotnet ausführbare Datei verteilt wird, z. B. integrierte CLI-Befehle und globale Tools. Wenn Sie ausführen dotnet <command>können, können Sie ausführen dotnet watch <command>.

    In .NET 8 SDK und höher können sie dotnet watch ausgeführt werden, oder dotnet rundotnet build.dotnet test Angeben run, , buildoder test für <command>.

    Wenn der untergeordnete Befehl nicht angegeben ist, ist run der Standardwert für dotnet run.

  • <forwarded arguments>

    Argumente, die nach einem doppelten Gedankenstrich (--) an den untergeordneten dotnet Prozess übergeben werden. Wenn Sie ausführen dotnet watch run, sind diese Argumente Optionen für die Dotnet-Ausführung. Wenn Sie ausgeführt dotnet watch testwerden, sind diese Argumente Optionen für den Dotnet-Test.

Options

  • --artifacts-path <ARTIFACTS_DIR>

    Alle Buildausgabedateien des ausgeführten Befehls werden in Unterordnern unter dem angegebenen Pfad, getrennt durch Das Projekt, verschoben. Weitere Informationen finden Sie unter "Artifacts Output Layout". Verfügbar ab dem .NET 8 SDK.

  • --disable-build-servers

    Erzwingt, dass der Befehl alle persistenten Buildserver ignoriert. Diese Option bietet eine konsistente Möglichkeit, die gesamte Verwendung von Buildcaches zu deaktivieren, wodurch die Neuerstellung eines Build von Grund auf erzwungen wird. Ein Build, der sich nicht auf Caches stützt, ist nützlich, wenn die Caches aus irgendeinem Grund beschädigt oder fehlerhaft sein können. Verfügbar ab dem .NET 7 SDK.

  • --list

    Listet alle ermittelten Dateien auf, ohne die Überwachung zu starten.

  • --no-self-contained

    Veröffentlichen Sie Ihre Anwendung als frameworkabhängige Anwendung. Eine kompatible .NET-Runtime muss auf dem Zielcomputer installiert sein, um Ihre Anwendung auszuführen.

  • --no-hot-reload

    Unterdrücken des heißen Neuladens für unterstützte Apps.

  • --non-interactive

    Wird im nicht interaktiven Modus ausgeführt dotnet watch . Verwenden Sie diese Option, um zu verhindern, dass Konsoleneingaben angefordert werden. Wenn hot reload aktiviert ist und eine unhöfliche Bearbeitung erkannt wird, startet dotnet watch die App neu. Verfügbar ab dem .NET 7 SDK.

  • --project <PATH>

    Gibt den Pfad der auszuführenden Projektdatei an (nur Ordner oder einschließlich des Projektdateinamens). Wenn nicht angegeben, wird standardmäßig das aktuelle Verzeichnis gewählt.

  • --sc|--self-contained

    Veröffentlichen Sie die .NET-Laufzeit mit Ihrer Anwendung, damit die Laufzeit nicht auf dem Zielcomputer installiert werden muss.

  • -q|--quiet

    Unterdrückt alle Ausgaben, die dotnet watch vom Befehl generiert werden, mit Ausnahme von Warnungen und Fehlern. Die Option wird nicht an untergeordnete Befehle übergeben. Beispielsweise wird die Ausgabe von dotnet restore und dotnet run weiterhin ausgegeben.

  • -v|--verbose

    Zeigt ausführliche Ausgabe für das Debuggen an.

  • --version

    Zeigt die Version von dotnet watch.

  • --

    Die Doppelstrichoption ('-') kann verwendet werden, um Optionen von Argumenten zu trennen dotnet watch , die an den untergeordneten Prozess übergeben werden. Die Verwendung ist optional. Wenn die Option "Doppelstrich" nicht verwendet wird, dotnet watch wird das erste nicht erkannte Argument als Der Anfang von Argumenten betrachtet, die an den untergeordneten dotnet Prozess übergeben werden sollen.

  • -?|-h|--help

    Gibt eine Beschreibung zur Verwendung des Befehls aus.

Umgebungsvariablen

dotnet watch verwendet die folgenden Umgebungsvariablen:

  • DOTNET_HOTRELOAD_NAMEDPIPE_NAME

    Dieser Wert wird konfiguriert, indem dotnet watch die App gestartet werden soll, und gibt die benannte Pipe an.

  • DOTNET_USE_POLLING_FILE_WATCHER

    Bei Festlegung auf 1 oder true, dotnet watch verwendet ein Abrufdatei-Watcher anstelle von System.IO.FileSystemWatcher. Die Abfrage ist für einige Dateisysteme erforderlich, z. B. Netzwerkfreigaben, Docker-bereitgestellte Volumes und andere virtuelle Dateisysteme. Die PhysicalFileProvider Klasse verwendet DOTNET_USE_POLLING_FILE_WATCHER , um zu bestimmen, ob die PhysicalFileProvider.Watch Methode auf die PollingFileChangeToken.

  • DOTNET_WATCH

    dotnet watch legt diese Variable 1 für alle untergeordneten Prozesse fest, die gestartet werden.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    Im Rahmen des dotnet watchBrowsers liest der Aktualisierungsservermechanismus diesen Wert vor, um die WebSocket-Hostumgebung zu bestimmen. Der Wert 127.0.0.1 wird ersetzt durch localhost, und die http:// Schemas https:// werden durch ws:// bzw wss:// . ersetzt.

  • DOTNET_WATCH_ITERATION

    dotnet watch legt diese Variable bei jeder Änderung einer Datei auf 1 und erhöht diese Variable, und der Befehl startet die Anwendung neu oder lädt die Anwendung erneut.

  • DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH

    Wenn diese Einstellung auf 1 " oder true" festgelegt ist, dotnet watch werden Browser nicht aktualisiert, wenn Dateiänderungen erkannt werden.

  • DOTNET_WATCH_SUPPRESS_EMOJIS

    Mit .NET SDK 6.0.300 und höher dotnet watch werden Nicht-ASCII-Zeichen an die Konsole ausgegeben, wie im folgenden Beispiel gezeigt:

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

    Auf bestimmten Konsolenhosts werden diese Zeichen möglicherweise gar nicht angezeigt. Um nicht unzustellbare Zeichen zu sehen, legen Sie diese Variable auf 1 oder true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Wenn diese Einstellung auf 1 "odertrue" festgelegt ist, dotnet watch werden keine Browser für Web-Apps gestartet oder aktualisiert, die in launchBrowserkonfiguriert wurden.

  • DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM

    Optimiert den Build standardmäßig, dotnet watch indem bestimmte Vorgänge vermieden werden, z. B. das Ausführen von Wiederherstellungsvorgängen oder die erneute Auswertung der überwachten Dateien für jede Dateiänderung. Wenn diese Variable auf 1 oder true, diese Optimierungen deaktiviert ist.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Bei Festlegung auf 1 oder true, dotnet watch wird keine spezielle Behandlung für statische Inhaltsdateien. dotnet watch legt die MSBuild-Eigenschaft DotNetWatchContentFiles auf false.

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Wenn diese Einstellung auf 1 " oder true" festgelegt ist, dotnet watch wird immer bei unhöflichen Bearbeitungen neu gestartet, anstatt sie zu fragen.

Standardmäßig überwachte Dateien

dotnet watch überwacht alle Elemente in der Watch Elementgruppe in der Projektdatei. Standardmäßig enthält diese Gruppe alle Elemente in den Compile Und EmbeddedResource Gruppen. dotnet watch überprüft außerdem das gesamte Diagramm der Projektverweise und überwacht alle Dateien innerhalb dieser Projekte.

Standardmäßig enthalten die Compile gruppen EmbeddedResource alle Dateien, die den folgenden Globmustern entsprechen:

  • **/*.cs
  • *.csproj
  • **/*.resx
  • Inhaltsdateien in Web-Apps: wwwroot/**

Standardmäßig lösen .config- und .json Dateien keinen Dotnet-Überwachungsneustart aus, da das Konfigurationssystem über eigene Mechanismen zum Behandeln von Konfigurationsänderungen verfügt.

Dateien können der Überwachungsliste hinzugefügt oder aus der Liste entfernt werden, indem Sie die Projektdatei bearbeiten. Dateien können einzeln oder mithilfe von Globmustern angegeben werden.

Weitere Dateien ansehen

Weitere Dateien können durch Hinzufügen von Elementen zur Watch Gruppe überwacht werden. Das folgende Markup erweitert diese Gruppe beispielsweise, um JavaScript-Dateien einzuschließen:

<ItemGroup>
  <Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>

Angegebene Dateien und Ordner ignorieren

Verwenden Sie das Watch="false" Attribut, um angegebene Dateien zu ignorieren. Verwenden Sie die DefaultItemExcludes Eigenschaft, um Ordner oder Dateien zu ignorieren, die überwacht werden.

Um zu verhindern, dass dotnet watch Dateien angezeigt werden, verwenden Sie die elemente und EmbeddedResource das CompileWatch="false" Attribut, wie im folgenden Beispiel gezeigt:

<ItemGroup>
  <Compile Update="Generated.cs" Watch="false" />
  <EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>

dotnet watch ignoriert Projektverweise, die das Watch="false" Attribut aufweisen, wie im folgenden Beispiel gezeigt:

<ItemGroup>
  <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>

Verwenden Sie ab .NET 10 die DefaultItemExcludes Eigenschaft, um ganze Ordner oder Dateimuster von der Überwachung dotnet watchauszuschließen. Dieser Ansatz ist nützlich, wenn Sie Dateien ausschließen möchten, die nicht für die Kompilierung oder Dateien relevant sind, die unerwünschte Neustarts auslösen oder neu geladen werden.

Dateien im App_Data Ordner ASP.NET Core-Anwendungen können sich z. B. ändern, während die App ausgeführt wird, wodurch unnötige Seitenladevorgänge verursacht werden. Ausschließen, dass dieser Ordner überwacht wird:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**</DefaultItemExcludes>
</PropertyGroup>

Schließen Sie mehrere Muster aus, indem Sie sie durch Semikolons trennen:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**;**/temp/**;**/*.log</DefaultItemExcludes>
</PropertyGroup>

Die DefaultItemExcludes Eigenschaft wirkt sich auf alle Standardelementtypen aus, z Compile . B. und EmbeddedResource. Das Watch="false" Attribut bietet eine bessere Kontrolle über bestimmte Dateien oder Projektverweise.

Weitere Informationen finden Sie in der DefaultItemExcludes-Referenz.

Erweiterte Konfiguration

dotnet watch führt einen Entwurfszeitbuild aus, um elemente zu suchen, die überwacht werden sollen. Wenn dieser Build ausgeführt wird, dotnet watch wird die Eigenschaft DotNetWatchBuild=truefestgelegt. Diese Eigenschaft kann verwendet werden, wie im folgenden Beispiel gezeigt:

<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
  <!-- only included in the project when dotnet-watch is running -->
</ItemGroup>

Hot Reload

Ab .NET 6 SDK dotnet watch bietet Unterstützung für das hot reload. "Hot reload" ist ein Feature, mit dem Sie Änderungen auf eine ausgeführte App anwenden können, ohne sie neu erstellen und neu starten zu müssen. Die Änderungen können Codedateien oder statische Objekte sein, z. B. Stylesheetdateien und JavaScript-Dateien. Dieses Feature optimiert die lokale Entwicklungsumgebung, da sie sofortiges Feedback gibt, wenn Sie Ihre App ändern.

Informationen zu App-Typen und .NET-Versionen, die hot reload unterstützen, finden Sie unter Unterstützte .NET-App Frameworks und Szenarien.

Unhöfliche Bearbeitungen

Wenn eine Datei geändert wird, wird ermittelt, dotnet watch ob die App heiß neu geladen werden kann. Wenn es nicht heiß geladen werden kann, wird die Änderung als unhöfliche Bearbeitung bezeichnet und dotnet watch fragt, ob Sie die App neu starten möchten:

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: Startet die App neu.
  • Nein: Lässt die App ohne angewendete Änderungen laufen.
  • Always: Restarts the app and doesn't prompt anymore for rude edits.
  • Nie: Lässt die App ohne angewendete Änderungen laufen und fordert sie nicht mehr zur unhöflichen Bearbeitung auf.

Informationen dazu, welche Arten von Änderungen als unhöfliche Änderungen gelten, finden Sie unter "Bearbeiten von Code" und "Debuggen" und " Nicht unterstützte Änderungen am Code".

Verwenden Sie die dotnet watch Option, wie im folgenden Beispiel gezeigt, um hot reload zu deaktivieren, wenn Sie die Ausführung ausführen--no-hot-reload:

dotnet watch --no-hot-reload 

Examples

  • Führen Sie die Ausführung dotnet run für das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:

    dotnet watch
    

    Oder:

    dotnet watch run
    
  • Führen Sie die Ausführung dotnet test für das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:

    dotnet watch test
    
  • Wird immer ausgeführt dotnet run --project ./HelloWorld.csproj , wenn sich der Quellcode ändert:

    dotnet watch run --project  ./HelloWorld.csproj
    
  • Führen Sie die Ausführung dotnet run -- arg0 für das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:

    dotnet watch run -- arg0
    

    Oder:

    dotnet watch -- run arg0
    

Siehe auch