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.
Von Rick Anderson und Victor Hurdugaci
dotnet watch
ist ein Tool, das einen .NET CLI-Befehl ausführt, wenn sich Quelldateien ändern. Beispielsweise kann eine Dateiänderung die Kompilierung, die Testausführung oder die Bereitstellung auslösen.
In diesem Lernprogramm wird eine vorhandene Web-API mit zwei Endpunkten verwendet: eine, die eine Summe zurückgibt und eine, die ein Produkt zurückgibt. Die Produktmethode hat einen Fehler, der in diesem Lernprogramm behoben ist.
Laden Sie die Beispiel-App herunter. Es besteht aus zwei Projekten: WebApp (eine ASP.NET Core Web API) und WebAppTests (Komponententests für die Web-API).
Navigieren Sie in einer Befehlsshell zum WebApp-Ordner . Führen Sie den folgenden Befehl aus:
dotnet run
Hinweis
Sie können verwenden dotnet run --project <PROJECT>
, um ein auszuführenes Projekt anzugeben. Wenn Sie beispielsweise dotnet run --project WebApp
aus dem Stammverzeichnis der Sample-App ausführen, wird auch das WebApp-Projekt ausgeführt.
Die Konsolenausgabe zeigt Nachrichten ähnlich wie die folgenden an (dies gibt an, dass die App ausgeführt wird und auf Anforderungen wartet):
$ dotnet run
Hosting environment: Development
Content root path: C:/Docs/aspnetcore/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Navigieren Sie in einem Webbrowser zu http://localhost:<port number>/api/math/sum?a=4&b=5
. Sie sollten sich das Ergebnis von 9
ansehen.
Navigieren Sie zur Produkt-API (http://localhost:<port number>/api/math/product?a=4&b=5
). Es gibt 9
zurück, nicht 20
, wie man erwarten würde. Dieses Problem wurde später im Lernprogramm behoben.
dotnet watch
zu einem Projekt hinzufügen
Das dotnet watch
Dateiüberwachungstool ist in Version 2.1.300 des .NET Core SDK enthalten. Die folgenden Schritte sind erforderlich, wenn Sie eine frühere Version des .NET Core SDK verwenden.
Fügen Sie der
Microsoft.DotNet.Watcher.Tools
Datei einen.csproj
Paketverweis hinzu:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
Installieren Sie das
Microsoft.DotNet.Watcher.Tools
-Paket, indem Sie den folgenden Befehl ausführen:dotnet restore
Ausführen von .NET CLI-Befehlen mit dotnet watch
Jeder .NET CLI-Befehl kann mit dotnet watch
ausgeführt werden. Beispiel:
Befehl | Befehl mit Überwachung |
---|---|
dotnet run (Befehl zum Ausführen einer .NET-Anwendung) | dotnet watch run |
dotnet run -f netcoreapp3.1 | dotnet watch run -f netcoreapp3.1 |
dotnet run -f netcoreapp3.1 -- --arg1 | dotnet watch run -f netcoreapp3.1 -- --arg1 |
dotnet test | dotnet watch test |
Führen Sie dotnet watch run
im Ordner WebApp aus. Die Konsolenausgabe gibt an, dass watch
gestartet wurde.
Das Ausführen von dotnet watch run
auf einer Web-App startet einen Browser, der zur URL der App navigiert, sobald die App bereit ist.
dotnet watch
tut dies, indem es die Konsolenausgabe der App liest und auf die von WebHost angezeigte Bereitschaftsmeldung wartet.
dotnet watch
aktualisiert den Browser, wenn Änderungen an überwachten Dateien erkannt werden. Dazu fügt der Überwachungsbefehl eine Middleware in die App ein, die HTML-Antworten ändert, die von der App erstellt wurden. Die Middleware fügt der Seite einen JavaScript-Skriptblock hinzu, der es dotnet watch
ermöglicht, den Browser zum Aktualisieren aufzufordern. Derzeit führen Änderungen an allen überwachten Dateien, einschließlich statischer Inhalte wie .html
und .css
Dateien, dazu, dass die App neu erstellt wird.
dotnet watch
:
- Überwacht nur Dateien, die sich standardmäßig auf Builds auswirken.
- Alle zusätzlich überwachten Dateien (über die Konfiguration) führen immer noch zu einem Build-Vorgang.
Weitere Informationen zur Konfiguration finden Sie in diesem Dokument unter dotnet-watch-Konfiguration .
Hinweis
Sie können zum Angeben eines zu überwachenden Projekts verwenden dotnet watch --project <PROJECT>
. Beispielsweise wird durch Ausführen von dotnet watch --project WebApp run
aus dem Stammverzeichnis der Beispiel-App auch das WebApp-Projekt ausgeführt und überwacht.
Änderungen vornehmen mit dotnet watch
Stellen Sie sicher, dass dotnet watch
ausgeführt wird.
Beheben Sie den Fehler in der Product
Methode, MathController.cs
damit es das Produkt und nicht die Summe zurückgibt:
public static int Product(int a, int b)
{
return a * b;
}
Speichern Sie die Datei. Die Konsolenausgabe gibt an, dass dotnet watch
eine Dateiänderung erkannt und die App neu gestartet wurde.
Überprüfen Sie, ob http://localhost:<port number>/api/math/product?a=4&b=5
das richtige Ergebnis zurückgibt.
Ausführen von Tests mithilfe von dotnet watch
Ändern Sie die Methode von
Product
beiMathController.cs
, sodass sie wieder die Summe zurückgibt. Speichern Sie die Datei.Navigieren Sie in einer Befehlsshell zum Ordner "WebAppTests ".
Führen Sie die dotnet-Wiederherstellung aus.
Führen Sie
dotnet watch test
aus. Die Ausgabe gibt an, dass ein Test fehlgeschlagen ist und dass der Watcher auf Dateiänderungen wartet:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.
Korrigieren Sie den
Product
Methodencode, damit es das Produkt zurückgibt. Speichern Sie die Datei.
dotnet watch
erkennt die Dateiänderung und führen die Tests erneut aus. Die Konsolenausgabe gibt die bestandenen Tests an.
Anpassen der Dateiliste zur Überwachung
Standardmäßig wird dotnet-watch
verwendet, um alle Dateien zu verfolgen, die den folgenden Globmustern entsprechen:
**/*.cs
*.csproj
**/*.resx
- Inhaltsdateien:
wwwroot/**
, ,**/*.config
**/*.json
Weitere Elemente können der Überwachungsliste durch Bearbeiten der .csproj
Datei hinzugefügt werden. Elemente können einzeln oder mithilfe von Globmustern angegeben werden.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Abmelden von Dateien, die überwacht werden sollen
dotnet-watch
kann so konfiguriert werden, dass die Standardeinstellungen ignoriert werden. Um bestimmte Dateien zu ignorieren, fügen Sie das Watch="false"
Attribut zur Definition eines Elements in der .csproj
Datei hinzu:
<ItemGroup>
<!-- exclude Generated.cs from dotnet-watch -->
<Compile Include="Generated.cs" Watch="false" />
<!-- exclude Strings.resx from dotnet-watch -->
<EmbeddedResource Include="Strings.resx" Watch="false" />
<!-- exclude changes in this referenced project -->
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
<ItemGroup>
<!-- Exclude all Content items from being watched. -->
<Content Update="@(Content)" Watch="false" />
</ItemGroup>
Benutzerdefinierte Uhrenprojekte
dotnet-watch
ist nicht auf C#-Projekte beschränkt. Benutzerdefinierte Uhrenprojekte können erstellt werden, um verschiedene Szenarien zu behandeln. Betrachten Sie das folgende Projektlayout:
-
Test/
UnitTests/UnitTests.csproj
IntegrationTests/IntegrationTests.csproj
Wenn beide Projekte überwacht werden sollen, erstellen Sie eine benutzerdefinierte Projektdatei, die für die Überwachung beider Projekte konfiguriert ist:
<Project>
<ItemGroup>
<TestProjects Include="**\*.csproj" />
<Watch Include="**\*.cs" />
</ItemGroup>
<Target Name="Test">
<MSBuild Targets="VSTest" Projects="@(TestProjects)" />
</Target>
<Import Project="$(MSBuildExtensionsPath)\Microsoft.Common.targets" />
</Project>
Um die Dateibeobachtung für beide Projekte zu starten, wechseln Sie in den Testordner . Führen Sie den folgenden Befehl aus:
dotnet watch msbuild /t:Test
VSTest wird ausgeführt, wenn sich dateien in beiden Testprojekts ändern.
dotnet-watch-Konfiguration
Einige Konfigurationsoptionen können an dotnet watch
durch Umgebungsvariablen übergeben werden. Die verfügbaren Variablen sind:
Konfiguration | BESCHREIBUNG |
---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Wenn dieser Wert auf "1" oder "true" festgelegt ist, wird anstelle von CoreFx dotnet watch ein Polling-Dateiüberwacher FileSystemWatcher verwendet. Wird verwendet, wenn Dateien auf Netzwerkfreigaben oder docker-bereitgestellten Volumes überwacht werden. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Standardmäßig optimiert dotnet watch den Build, indem bestimmte Vorgänge wie das Ausführen des Wiederherstellungsvorgangs oder eine erneute Bewertung der überwachten Datei-Sets für jede Dateiänderung vermieden werden. Wenn dieser Wert auf "1" oder "true" festgelegt ist, werden diese Optimierungen deaktiviert. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run versucht, Browser für Web-Apps zu starten, die mit launchBrowser in launchSettings.json konfiguriert sind. Wenn dieser Wert auf "1" oder "true" festgelegt ist, wird dieses Verhalten unterdrückt. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run versucht, Browser zu aktualisieren, wenn Dateiänderungen erkannt werden. Wenn dieser Wert auf "1" oder "true" festgelegt ist, wird dieses Verhalten unterdrückt. Dieses Verhalten wird auch unterdrückt, wenn DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER festgelegt wird. |
Browseraktualisierung
dotnet watch
fügt ein Skript in die App ein, mit dem der Browser aktualisiert werden kann, wenn sich der Inhalt ändert. In einigen Szenarien, z. B. wenn die App die Reaktionskomprimierung aktiviert, dotnet watch
kann das Skript möglicherweise nicht eingefügt werden. Bei solchen Fällen in der Entwicklung wird das Skript manuell in die App eingefügt. Um beispielsweise die Web-App so zu konfigurieren, dass das Skript manuell eingefügt wird, aktualisieren Sie die Layoutdatei so, dass folgendes enthalten _framework/aspnet-browser-refresh.js
ist:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Nicht-ASCII-Zeichen
Visual Studio 17.2 oder höher enthält das .NET SDK 6.0.300 oder höher. Mit der .NET SDK Version 6.0.300 und später gibt dotnet-watch
während einer Hot-Reload-Sitzung nicht-ASCII-Zeichen an die Konsole aus. Auf bestimmten Konsolenhosts, wie zum Beispiel dem Windows-Conhost, können diese Zeichen möglicherweise fehlerhaft angezeigt werden. Um unleserliche Zeichen zu vermeiden, können Sie einen der folgenden Ansätze berücksichtigen.
- Konfigurieren Sie die
DOTNET_WATCH_SUPPRESS_EMOJIS=1
Umgebungsvariable, um diese Werte zu unterdrücken. - Wechseln Sie zu einem anderen Terminal, wie beispielsweise https://github.com/microsoft/terminal, das die Wiedergabe von Nicht-ASCII-Zeichen unterstützt.