Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 watchder über diedotnetausführbare Datei verteilt wird, z. B. integrierte CLI-Befehle und globale Tools. Wenn Sie ausführendotnet <command>können, können Sie ausführendotnet watch <command>.In .NET 8 SDK und höher können sie
dotnet watchausgeführt werden, oderdotnet rundotnet build.dotnet testAngebenrun, ,buildodertestfür<command>.Wenn der untergeordnete Befehl nicht angegeben ist, ist
runder Standardwert fürdotnet run.<forwarded arguments>Argumente, die nach einem doppelten Gedankenstrich (
--) an den untergeordnetendotnetProzess übergeben werden. Wenn Sie ausführendotnet watch run, sind diese Argumente Optionen für die Dotnet-Ausführung. Wenn Sie ausgeführtdotnet 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-serversErzwingt, 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.
--listListet alle ermittelten Dateien auf, ohne die Überwachung zu starten.
-
--no-self-containedVerö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-reloadUnterdrücken des heißen Neuladens für unterstützte Apps.
--non-interactiveWird 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-containedVeröffentlichen Sie die .NET-Laufzeit mit Ihrer Anwendung, damit die Laufzeit nicht auf dem Zielcomputer installiert werden muss.
-q|--quietUnterdrückt alle Ausgaben, die
dotnet watchvom Befehl generiert werden, mit Ausnahme von Warnungen und Fehlern. Die Option wird nicht an untergeordnete Befehle übergeben. Beispielsweise wird die Ausgabe vondotnet restoreunddotnet runweiterhin ausgegeben.-v|--verboseZeigt ausführliche Ausgabe für das Debuggen an.
--versionZeigt 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 watchwird das erste nicht erkannte Argument als Der Anfang von Argumenten betrachtet, die an den untergeordnetendotnetProzess übergeben werden sollen.-
-?|-h|--helpGibt eine Beschreibung zur Verwendung des Befehls aus.
Umgebungsvariablen
dotnet watch verwendet die folgenden Umgebungsvariablen:
DOTNET_HOTRELOAD_NAMEDPIPE_NAMEDieser Wert wird konfiguriert, indem
dotnet watchdie App gestartet werden soll, und gibt die benannte Pipe an.DOTNET_USE_POLLING_FILE_WATCHERBei Festlegung auf
1odertrue,dotnet watchverwendet 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 verwendetDOTNET_USE_POLLING_FILE_WATCHER, um zu bestimmen, ob die PhysicalFileProvider.Watch Methode auf die PollingFileChangeToken.DOTNET_WATCHdotnet watchlegt diese Variable1für alle untergeordneten Prozesse fest, die gestartet werden.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAMEIm Rahmen des
dotnet watchBrowsers liest der Aktualisierungsservermechanismus diesen Wert vor, um die WebSocket-Hostumgebung zu bestimmen. Der Wert127.0.0.1wird ersetzt durchlocalhost, und diehttp://Schemashttps://werden durchws://bzwwss://. ersetzt.DOTNET_WATCH_ITERATIONdotnet watchlegt diese Variable bei jeder Änderung einer Datei auf1und erhöht diese Variable, und der Befehl startet die Anwendung neu oder lädt die Anwendung erneut.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESHWenn diese Einstellung auf
1" odertrue" festgelegt ist,dotnet watchwerden Browser nicht aktualisiert, wenn Dateiänderungen erkannt werden.DOTNET_WATCH_SUPPRESS_EMOJISMit .NET SDK 6.0.300 und höher
dotnet watchwerden 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
1odertrue.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSERWenn diese Einstellung auf
1"odertrue" festgelegt ist,dotnet watchwerden keine Browser für Web-Apps gestartet oder aktualisiert, die inlaunchBrowserkonfiguriert wurden.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISMOptimiert den Build standardmäßig,
dotnet watchindem 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 auf1odertrue, diese Optimierungen deaktiviert ist.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLINGBei Festlegung auf
1odertrue,dotnet watchwird keine spezielle Behandlung für statische Inhaltsdateien.dotnet watchlegt die MSBuild-EigenschaftDotNetWatchContentFilesauffalse.DOTNET_WATCH_RESTART_ON_RUDE_EDITWenn diese Einstellung auf
1" odertrue" festgelegt ist,dotnet watchwird 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 runfür das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:dotnet watchOder:
dotnet watch runFühren Sie die Ausführung
dotnet testfür das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:dotnet watch testWird immer ausgeführt
dotnet run --project ./HelloWorld.csproj, wenn sich der Quellcode ändert:dotnet watch run --project ./HelloWorld.csprojFühren Sie die Ausführung
dotnet run -- arg0für das Projekt im aktuellen Verzeichnis aus, wenn sich der Quellcode ändert:dotnet watch run -- arg0Oder:
dotnet watch -- run arg0