В этом руководстве мы воспользуемся существующим приложением WebApi (оно вычисляет сумму и произведение двух чисел), чтобы продемонстрировать варианты использования dotnet watch. Образец приложения специально содержит ошибку, которую мы исправим во время изучения.



Второй цикл статей по ASP.NET Core


1. Создание серверных служб для мобильных приложений.
2. Разработка приложений ASP.NET Core с помощью dotnet watch.
3. Создание справочных страниц веб-API ASP.NET с помощью Swagger.
4. Открытый веб-интерфейс для .NET (OWIN).
5. Выбор правильной среды разработки .NET на сервере.

Введение


dotnet watch — это инструмент для разработчиков, который выполняет команду dotnet при изменении исходных файлов. С его помощью можно компилировать, тестировать или публиковать изменения в коде.

Начало работы


Сначала скачайте образец приложения. Оно содержит два проекта, WebApp (веб-приложение) и WebAppTests (модульные тесты для веб-приложения).
В консоли перейдите в папку WebApp и выполните команды:
  • dotnet restore
  • dotnet run

Консоль отобразит сообщения (пример ниже), которые укажут на то, что приложение работает и ожидает запросы.

$ dotnet run
Hosting environment: Production
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.

В браузере перейдите по адресу http://localhost:5000/api/math/sum?a=4&b=5, вы увидите результат 9.

Если вы перейдете по адресу http://localhost:5000/api/math/product?a=4&b=5, снова получите 9 вместо ожидаемого 4 * 5 = 20. Мы это исправим ниже.

Добавление dotnet watch в проект


1. Добавьте Microsoft.DotNet.Watcher.Tools в файл .csproj:

<ItemGroup>
	<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0" />
	</ItemGroup>

2. Выполните команду dotnet restore.

Выполнение команд dotnet с помощью dotnet watch


Любую команду dotnet можно выполнить с помощью dotnet watch, например:
Команда Команда с watch
dotnet run dotnet watch run
dotnet run -f net451 dotnet watch run -f net451
dotnet run -f net451 — --arg1 dotnet watch run -f net451 — --arg1
dotnet test dotnet watch test

Чтобы выполнить WebApp с помощью watcher, выполните команду dotnet watch run в папке WebApp. Консоль отобразит сообщения, что watch работает.

Внесение изменений с помощью dotnet watch


Убедитесь, что dotnet watch работает.

Давайте исправим ошибку в методе Product в MathController, чтобы он возвращал произведение, а не сумму:

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

Сохраните файл. В консоли отобразятся сообщения, которые укажут на то, что dotnet watch обнаружил изменение в файле и перезапустил приложение.

Убедитесь, что http://localhost:5000/api/math/product?a=4&b=5 выдает правильный результат.

Выполнение тестов с помощью dotnet watch


  • Измените метод Product в MathController к возврату суммы и сохраните файл.
  • В командной строке перейдите в WebAppTests.
  • Выполните dotnet restore.
  • Выполните dotnet watch test. Вы увидите сообщение о том, что тест не прошёл и watcher ожидает изменение в файле:

    Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
    	Test Run Failed.

  • Исправьте метод Product так, чтобы он возвращал произведение.

dotnet watch обнаружит изменение в файле и перезапустит тесты. В консоли отобразится сообщение, что тест пройден успешно.

dotnet-watch на GitHub


dotnet-watch — это часть репозитория DotNetTools. Всё, что вы не нашли в этом руководстве, можно посмотреть именно там.

UPD: Благодарим за корректировку Илью.
Поделиться с друзьями
-->

Комментарии (7)


  1. kanekt
    20.03.2017 11:27

    dotnet-watch — можно использовать на основном сервере или лучше только для локальной разработки?


    1. SonicGD
      20.03.2017 11:59

      А вы на продакшн исходники загружаете? Поидее там у вас только dll должны быть.


      1. kanekt
        20.03.2017 12:03

        вообще хотелось бы иметь возможность рестарта приложения из исходного кода, но это можно без заморочек достичь только при изменении web.config


  1. pshhpshh
    20.03.2017 14:20

    Возможность дебага в таком режиме добавили?
    Что на счет скорости? В последний раз, когда я пробовал, этот watch особо не прибавил в скорости изменил-увидел.


    1. ggrnd0
      20.03.2017 15:01

      И не прибавит, он перезапускает приложение.


      1. kanekt
        20.03.2017 15:08
        +1

        Автоматизация кнопки — Stop/Run ?)


        1. ggrnd0
          20.03.2017 15:34
          +1

          Да.


          https://github.com/aspnet/DotNetTools/blob/e481df3d49f5185faaf12be098dd6b0f4d64d698/src/Microsoft.DotNet.Watcher.Tools/DotNetWatcher.cs#L69


          Все что делает watcher, убивает процесс с timeout=30sec и запускает его снова.
          Как это будет дружить с отладкой, не понятно… Никак?)