Entwickeln von ASP.NET Core-Apps mit einem DateiwatcherDevelop ASP.NET Core apps using a file watcher

Von Rick Anderson und Victor HurdugaciBy Rick Anderson and Victor Hurdugaci

dotnet watch ist ein Tool, das einen .NET Core-CLI-Befehl ausführt, wenn sich Quelldateien ändern.dotnet watch is a tool that runs a .NET Core CLI command when source files change. Eine Dateiänderung kann beispielsweise eine Kompilierung, Testausführung oder Bereitstellung auslösen.For example, a file change can trigger compilation, test execution, or deployment.

In diesem Tutorial wird eine vorhandene Web-API mit zwei Endpunkten verwendet: der eine gibt eine Summe zurück, der andere ein Produkt.This tutorial uses an existing web API with two endpoints: one that returns a sum and one that returns a product. Die Produktmethode enthält einen Fehler, der in diesem Tutorial behoben wird.The product method has a bug, which is fixed in this tutorial.

Laden Sie die Beispiel-App herunter.Download the sample app. Sie enthält zwei Projekte: WebApp (eine ASP.NET Core-Web-API) und WebAppTests (Komponententest für die Web-API).It consists of two projects: WebApp (an ASP.NET Core web API) and WebAppTests (unit tests for the web API).

Navigieren Sie in einer Befehlsshell zum Ordner WebApp.In a command shell, navigate to the WebApp folder. Führen Sie den folgenden Befehl aus:Run the following command:

dotnet run

Hinweis

Sie können dotnet run --project <PROJECT> verwenden, um ein auszuführendes Projekt anzugeben.You can use dotnet run --project <PROJECT> to specify a project to run. Wenn Sie beispielsweise im Stammverzeichnis der Beispiel-App dotnet run --project WebApp ausführen, wird auch das Projekt WebApp ausgeführt.For example, running dotnet run --project WebApp from the root of the sample app will also run the WebApp project.

Die Konsolenausgabe zeigt Meldungen ähnlich der folgenden (die angibt, dass die App ausgeführt wird und auf Anforderungen wartet):The console output shows messages similar to the following (indicating that the app is running and awaiting requests):

$ 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.In a web browser, navigate to http://localhost:<port number>/api/math/sum?a=4&b=5. Es sollten die Ergebnisse von 9 angezeigt werden.You should see the result of 9.

Navigieren Sie zur Produkt-API (http://localhost:<port number>/api/math/product?a=4&b=5).Navigate to the product API (http://localhost:<port number>/api/math/product?a=4&b=5). Es wird nicht wie erwartet 20 sondern 9 zurückgegeben.It returns 9, not 20 as you'd expect. Dieses Problem wird später im Tutorial behoben.That problem is fixed later in the tutorial.

Hinzufügen von dotnet watch zu einem ProjektAdd dotnet watch to a project

Das Dateiwatcher-Tool dotnet watch ist im Lieferumfang von .NET Core SDK-Version 2.1.300 enthalten.The dotnet watch file watcher tool is included with version 2.1.300 of the .NET Core SDK. Wenn Sie eine frühere Version von .NET Core SDK verwenden, sind die folgenden Schritte erforderlich.The following steps are required when using an earlier version of the .NET Core SDK.

  1. Fügen Sie der CSPROJ-Datei einen Microsoft.DotNet.Watcher.Tools-Paketverweis hinzu:Add a Microsoft.DotNet.Watcher.Tools package reference to the .csproj file:

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
    </ItemGroup>
    
  2. Installieren Sie das Microsoft.DotNet.Watcher.Tools-Paket, indem Sie den folgenden Befehl ausführen:Install the Microsoft.DotNet.Watcher.Tools package by running the following command:

    dotnet restore
    

Ausführen von .NET Core-CLI-Befehlen mit dotnet watchRun .NET Core CLI commands using dotnet watch

Jeder .NET Core-CLI-Befehl kann mit dotnet watch ausgeführt werden.Any .NET Core CLI command can be run with dotnet watch. Beispiel:For example:

BefehlCommand Befehl mit watchCommand with watch
dotnet rundotnet run dotnet watch rundotnet watch run
dotnet run -f netcoreapp2.0dotnet run -f netcoreapp2.0 dotnet watch run -f netcoreapp2.0dotnet watch run -f netcoreapp2.0
dotnet run -f netcoreapp2.0 -- --arg1dotnet run -f netcoreapp2.0 -- --arg1 dotnet watch run -f netcoreapp2.0 -- --arg1dotnet watch run -f netcoreapp2.0 -- --arg1
dotnet testdotnet test dotnet watch testdotnet watch test

Führen Sie dotnet watch run im Ordner WebApp aus.Run dotnet watch run in the WebApp folder. Die Konsolenausgabe gibt an, dass watch gestartet wurde.The console output indicates watch has started.

Hinweis

Sie können dotnet watch --project <PROJECT> verwenden, um ein zu überwachendes Projekt anzugeben.You can use dotnet watch --project <PROJECT> to specify a project to watch. Wenn Sie beispielsweise im Stammverzeichnis der Beispiel-App dotnet watch --project WebApp run ausführen, wird auch das Projekt WebApp ausgeführt und überwacht.For example, running dotnet watch --project WebApp run from the root of the sample app will also run and watch the WebApp project.

Vornehmen von Änderungen mit dotnet watchMake changes with dotnet watch

Stellen Sie sicher, dass dotnet watch ausgeführt wird.Make sure dotnet watch is running.

Korrigieren Sie den Fehler in der Product-Methode von MathController.cs so, dass das Produkt und nicht die Summe zurückgegeben wird:Fix the bug in the Product method of MathController.cs so it returns the product and not the sum:

public static int Product(int a, int b)
{
    return a * b;
}

Speichern Sie die Datei.Save the file. Die Konsolenausgabe zeigt an, dass dotnet watch eine Dateiänderung erkannt und die App neu gestartet hat.The console output indicates that dotnet watch detected a file change and restarted the app.

Vergewissern Sie sich, dass http://localhost:<port number>/api/math/product?a=4&b=5 das richtige Ergebnis zurückgibt.Verify http://localhost:<port number>/api/math/product?a=4&b=5 returns the correct result.

Ausführen von Tests mit dotnet watchRun tests using dotnet watch

  1. Ändern Sie die Product-Methode von MathController.cs so, dass wieder die Summe zurückgegeben wird.Change the Product method of MathController.cs back to returning the sum. Speichern Sie die Datei.Save the file.

  2. Navigieren Sie in einer Befehlsshell zum Ordner WebAppTests.In a command shell, navigate to the WebAppTests folder.

  3. Führen Sie dotnet restore aus.Run dotnet restore.

  4. Führen Sie aus dotnet watch test.Run dotnet watch test. In der Ausgabe wird angezeigt, dass ein Test fehlgeschlagen ist und der Watcher auf Dateiänderungen wartet:Its output indicates that a test failed and that the watcher is awaiting file changes:

    Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
    Test Run Failed.
    
  5. Ändern Sie den Code der Product-Methode so, dass das Produkt zurückgegeben wird.Fix the Product method code so it returns the product. Speichern Sie die Datei.Save the file.

dotnet watch erkennt die Dateiänderung und führt die Tests erneut aus.dotnet watch detects the file change and reruns the tests. Die Konsolenausgabe zeigt, dass die Tests bestanden wurden.The console output indicates the tests passed.

Anpassen der Liste mit den zu überwachenden DateienCustomize files list to watch

Standardmäßig überwacht dotnet-watch alle Dateien mit den folgenden Globmustern:By default, dotnet-watch tracks all files matching the following glob patterns:

  • **/*.cs
  • *.csproj
  • **/*.resx

Durch Bearbeiten der CSPROJ-Datei können der Watchlist weitere Elemente hinzugefügt werden.More items can be added to the watch list by editing the .csproj file. Dabei können die Elemente einzeln oder mithilfe von Globmustern angegeben werden.Items can be specified individually or by using glob patterns.

<ItemGroup>
    <!-- extends watching group to include *.js files -->
    <Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>

Abwählen von zu überwachenden DateienOpt-out of files to be watched

Sie können dotnet-watch so konfigurieren, dass die Standardeinstellungen ignoriert werden.dotnet-watch can be configured to ignore its default settings. Wenn Sie bestimmte Dateien ignorieren möchten, fügen Sie der Definition eines Elements in der CSPROJ-Datei das Watch="false"-Attribut hinzu:To ignore specific files, add the Watch="false" attribute to an item's definition in the .csproj file:

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

Benutzerdefinierte ÜberwachungsprojekteCustom watch projects

dotnet-watch ist nicht auf C#-Projekte beschränkt.dotnet-watch isn't restricted to C# projects. Sie können für unterschiedliche Szenarios benutzerdefinierte Überwachungsprojekte erstellen.Custom watch projects can be created to handle different scenarios. Betrachten Sie das folgende Projektlayout:Consider the following project layout:

  • test/test/
    • UnitTests/UnitTests.csprojUnitTests/UnitTests.csproj
    • IntegrationTests/IntegrationTests.csprojIntegrationTests/IntegrationTests.csproj

Wenn beide Projekte überwacht werden sollen, erstellen Sie eine benutzerdefinierte Projektdatei, die so konfiguriert ist, dass beide Projekte überwacht werden:If the goal is to watch both projects, create a custom project file configured to watch both projects:

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

Wechseln Sie zum Starten der Dateiüberwachung in beiden Projekten zum test-Ordner.To start file watching on both projects, change to the test folder. Führen Sie den folgenden Befehl aus:Execute the following command:

dotnet watch msbuild /t:Test

VSTest wird ausgeführt, wenn in einer beliebigen Datei in einem der Testprojekte Änderungen vorgenommen werden.VSTest executes when any file changes in either test project.

dotnet-watch in GitHubdotnet-watch in GitHub

dotnet-watch ist Teil des GitHub-Aspnet/AspNetCore-Repository.dotnet-watch is part of the GitHub aspnet/AspNetCore repository.