AspNetCore.Docs/aspnetcore/tutorials/dotnet-watch.md

110 lines
4.4 KiB
Markdown
Raw Normal View History

2016-10-29 01:35:15 +08:00
---
2017-07-01 07:47:15 +08:00
title: Developing ASP.NET Core apps using dotnet watch
2016-10-29 01:35:15 +08:00
author: rick-anderson
2017-10-06 02:45:50 +08:00
description: This tutorial demonstrates how to install and use the .NET Core CLI's file watcher (dotnet watch) tool in an ASP.NET Core application.
2016-10-29 01:35:15 +08:00
manager: wpickett
2018-01-29 23:21:31 +08:00
ms.author: riande
2017-10-06 02:45:50 +08:00
ms.date: 10/05/2017
ms.prod: asp.net-core
2018-01-29 23:21:31 +08:00
ms.technology: aspnet
ms.topic: article
2016-10-29 01:35:15 +08:00
uid: tutorials/dotnet-watch
---
# Developing ASP.NET Core apps using dotnet watch
2016-10-29 01:35:15 +08:00
By [Rick Anderson](https://twitter.com/RickAndMSFT) and [Victor Hurdugaci](https://twitter.com/victorhurdugaci)
2016-10-29 01:35:15 +08:00
2017-10-06 03:39:38 +08:00
`dotnet watch` is a tool that runs a [.NET Core CLI](/dotnet/core/tools) command when source files change. For example, a file change can trigger compilation, test execution, or deployment.
2016-10-29 01:35:15 +08:00
2017-09-11 22:57:10 +08:00
In this tutorial, we use an existing Web API app with two endpoints: one that returns a sum and one that returns a product. The product method contains a bug that we'll fix as part of this tutorial.
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
Download the [sample app](https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/dotnet-watch/sample). It contains two projects: *WebApp* (an ASP.NET Core Web API) and *WebAppTests* (unit tests for the Web API).
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
In a command shell, navigate to the *WebApp* folder and run the following command:
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
```console
dotnet run
```
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
The console output shows messages similar to the following (indicating that the app is running and awaiting requests):
2016-10-29 01:35:15 +08:00
```console
2016-10-29 01:35:15 +08:00
$ dotnet run
2017-10-06 02:45:50 +08:00
Hosting environment: Development
Content root path: C:/Docs/aspnetcore/tutorials/dotnet-watch/sample/WebApp
2016-10-29 01:35:15 +08:00
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
2016-11-18 13:03:07 +08:00
```
2016-10-29 01:35:15 +08:00
2017-10-06 04:22:07 +08:00
In a web browser, navigate to `http://localhost:<port number>/api/math/sum?a=4&b=5`. You should see the result of `9`.
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
Navigate to the product API (`http://localhost:<port number>/api/math/product?a=4&b=5`). It returns `9`, not `20` as you'd expect. We'll fix that later in the tutorial.
2016-10-29 01:35:15 +08:00
## Add `dotnet watch` to a project
2016-10-29 01:35:15 +08:00
2017-10-06 03:39:38 +08:00
1. Add a `Microsoft.DotNet.Watcher.Tools` package reference to the *.csproj* file:
2017-10-06 02:45:50 +08:00
2017-10-06 03:39:38 +08:00
```xml
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
```
2016-10-29 01:35:15 +08:00
2017-10-06 04:22:07 +08:00
1. Install the `Microsoft.DotNet.Watcher.Tools` package by running the following command:
```console
dotnet restore
```
2016-10-29 01:35:15 +08:00
## Running .NET Core CLI commands using `dotnet watch`
2016-10-29 01:35:15 +08:00
2017-10-06 03:39:38 +08:00
Any [.NET Core CLI command](/dotnet/core/tools#cli-commands) can be run with `dotnet watch`. For example:
2016-10-29 01:35:15 +08:00
| Command | Command with watch |
| ---- | ----- |
| dotnet run | dotnet watch run |
2017-10-06 03:39:38 +08:00
| dotnet run -f netcoreapp2.0 | dotnet watch run -f netcoreapp2.0 |
| dotnet run -f netcoreapp2.0 -- --arg1 | dotnet watch run -f netcoreapp2.0 -- --arg1 |
2016-10-29 01:35:15 +08:00
| dotnet test | dotnet watch test |
2017-10-06 02:45:50 +08:00
Run `dotnet watch run` in the *WebApp* folder. The console output indicates `watch` has started.
2016-10-29 01:35:15 +08:00
## Making changes with `dotnet watch`
Make sure `dotnet watch` is running.
Fix the bug in the `Product` method of *MathController.cs* so it returns the product and not the sum:
2016-10-29 01:35:15 +08:00
```csharp
public static int Product(int a, int b)
{
return a * b;
2017-04-07 05:38:57 +08:00
}
```
2016-10-29 01:35:15 +08:00
Save the file. The console output indicates that `dotnet watch` detected a file change and restarted the app.
2016-10-29 01:35:15 +08:00
2017-10-06 02:45:50 +08:00
Verify `http://localhost:<port number>/api/math/product?a=4&b=5` returns the correct result.
2016-10-29 01:35:15 +08:00
## Running tests using `dotnet watch`
2017-10-06 03:39:38 +08:00
1. Change the `Product` method of *MathController.cs* back to returning the sum and save the file.
1. In a command shell, navigate to the *WebAppTests* folder.
1. Run `dotnet restore`.
1. Run `dotnet watch test`. Its output indicates that a test failed and that watcher is awaiting file changes:
2017-10-06 03:39:38 +08:00
```console
Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
Test Run Failed.
```
2017-10-06 02:45:50 +08:00
2017-10-06 03:39:38 +08:00
1. Fix the `Product` method code so it returns the product. Save the file.
2017-10-06 02:45:50 +08:00
`dotnet watch` detects the file change and reruns the tests. The console output indicates the tests passed.
2017-03-10 08:34:57 +08:00
## dotnet-watch in GitHub
dotnet-watch is part of the GitHub [DotNetTools repository](https://github.com/aspnet/DotNetTools/tree/dev/src/dotnet-watch).
2017-03-10 08:34:57 +08:00
The [MSBuild section](https://github.com/aspnet/DotNetTools/tree/dev/src/dotnet-watch#msbuild) of the [dotnet-watch ReadMe](https://github.com/aspnet/DotNetTools/blob/dev/src/dotnet-watch/README.md) explains how dotnet-watch can be configured from the MSBuild project file being watched. The [dotnet-watch ReadMe](https://github.com/aspnet/DotNetTools/blob/dev/src/dotnet-watch/README.md) contains information on dotnet-watch not covered in this tutorial.