Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Рик Андерсон и Виктор Хурдугачи
dotnet watch
— это средство, которое запускает команду .NET CLI при изменении исходных файлов. Например, изменение файла может активировать компиляцию, выполнение теста или развертывание.
В этом руководстве используется существующий веб-API с двумя конечными точками: один, который возвращает сумму и тот, который возвращает продукт. Метод продукта имеет ошибку, которая исправлена в этом руководстве.
Скачайте пример приложения . Он состоит из двух проектов: WebApp (веб-API ASP.NET Core) и WebAppTests (модульные тесты для веб-API).
В командной оболочке перейдите в папку WebApp . Выполните следующую команду:
dotnet run
Замечание
Можно использовать dotnet run --project <PROJECT>
для указания проекта для запуска. Например, запуск dotnet run --project WebApp
из корневого каталога примера приложения также будет запускать проект WebApp .
В выходных данных консоли отображаются сообщения, аналогичные следующим (указывающим, что приложение выполняется и ожидает запросов):
$ 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.
Откройте браузер и перейдите по адресу http://localhost:<port number>/api/math/sum?a=4&b=5
. Вы должны увидеть результат 9
.
Перейдите к API продукта (http://localhost:<port number>/api/math/product?a=4&b=5
). Возвращается 9
, вместо 20
, как ожидалось. Эта проблема устранена позже в руководстве.
Добавить dotnet watch
в проект
Средство dotnet watch
наблюдения за файлами входит в состав пакета SDK .NET Core версии 2.1.300. При использовании более ранней версии пакета SDK для .NET Core необходимо выполнить следующие действия.
Добавьте в файл
.csproj
ссылку на пакетMicrosoft.DotNet.Watcher.Tools
.<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
Установите пакет
Microsoft.DotNet.Watcher.Tools
, запустив следующую команду:dotnet restore
Выполнение команд .NET CLI с помощью dotnet watch
Любая команда .NET CLI может выполняться с помощью dotnet watch
. Рассмотрим пример.
командование | Команда с наблюдением |
---|---|
dotnet run | Выполнение команды dotnet watch run |
dotnet run -f netcoreapp3.1 | dotnet watch run -f netcoreapp3.1 - выполнение команды для автоматической сборки и запуска приложения на платформе .NET Core версии 3.1. |
dotnet run -f netcoreapp3.1 -- --arg1 (запустить приложение .NET) | dotnet watch run -f netcoreapp3.1 -- --arg1 |
dotnet test (команда для тестирования приложений в .NET) | Тест dotnet watch |
Запустите dotnet watch run
в папке WebApp . Выходные данные консоли указывают, что watch
запущен.
При запуске dotnet watch run
веб-приложения запускается браузер, который перейдет по URL-адресу приложения после готовности.
dotnet watch
делает это, считывая выходные данные консоли приложения и ожидая готового сообщения, отображаемого WebHost.
dotnet watch
обновляет браузер при обнаружении изменений в просмотре файлов. Для этого команда watch внедряет ПО промежуточного слоя в приложение, которое изменяет HTML-ответы, созданные приложением. Промежуточное программное обеспечение добавляет блок скрипта JavaScript на страницу, который дает dotnet watch
команду браузеру обновиться. В настоящее время все изменения в отслеживаемых файлах, включая такие статические файлы, как .html
и .css
, вызывают перестроение приложения.
dotnet watch
:
- По умолчанию просматривает только файлы, влияющие на сборки.
- Все дополнительные просмотрированные файлы (с помощью конфигурации) по-прежнему приводят к сборке.
Дополнительные сведения о конфигурации см. в разделе "Конфигурация dotnet-watch " в этом документе.
Замечание
Можно использовать dotnet watch --project <PROJECT>
для указания проекта для просмотра. Например, при запуске dotnet watch --project WebApp run
из корневого каталога образца приложения также будет запущен и отслеживаться проект WebApp.
Внесение изменений с помощью dotnet watch
Убедитесь, что dotnet watch
работает.
Исправьте ошибку в методе Product
MathController.cs
, чтобы он возвращал продукт, а не сумму:
public static int Product(int a, int b)
{
return a * b;
}
Сохраните файл. Выходные данные консоли указывают на то, что dotnet watch
обнаружено изменение файла и перезапущено приложение.
Убедитесь, что http://localhost:<port number>/api/math/product?a=4&b=5
возвращает правильный результат.
Выполнение тестов с помощью dotnet watch
Измените
Product
методMathController.cs
, чтобы он снова возвращал сумму. Сохраните файл.В командной оболочке перейдите в папку WebAppTests .
Запустите команду dotnet restore.
Выполните
dotnet watch test
. Его выходные данные указывают на то, что тест завершился сбоем и что наблюдатель ожидает изменения файла:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.
Product
Исправьте код метода, чтобы он возвращал продукт. Сохраните файл.
dotnet watch
обнаруживает изменение файла и повторно запускает тесты. Выходные данные консоли указывают на пройденные тесты.
Настройка списка файлов для просмотра
По умолчанию dotnet-watch
отслеживает все файлы, соответствующие следующим шаблонам глобов:
**/*.cs
*.csproj
**/*.resx
- Файлы содержимого:
wwwroot/**
,**/*.config
**/*.json
Дополнительные элементы можно добавить в список наблюдения, изменив .csproj
файл. Элементы можно указать по отдельности или с помощью шаблонов глобов.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Исключение файлов из списка отслеживаемых
dotnet-watch
можно настроить, чтобы игнорировать параметры по умолчанию. Чтобы игнорировать определенные файлы, добавьте Watch="false"
атрибут в определение элемента в .csproj
файле:
<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>
Проекты часов на заказ
dotnet-watch
не ограничивается проектами C#. Специальные проекты часов можно создавать для решения различных сценариев. Рассмотрим следующий макет проекта:
-
тест/
UnitTests/UnitTests.csproj
IntegrationTests/IntegrationTests.csproj
Если цель состоит в просмотре обоих проектов, создайте пользовательский файл проекта, настроенный для просмотра обоих проектов:
<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>
Чтобы начать просмотр файлов в обоих проектах, перейдите в тестовую папку. Выполните следующую команду:
dotnet watch msbuild /t:Test
VSTest выполняется при изменении файлов в любом тестовом проекте.
Конфигурация dotnet-watch
Некоторые параметры конфигурации можно задать переменными среды через dotnet watch
. Доступные переменные:
Настройки | Описание |
---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Если задано значение "1" или "true", dotnet watch используется наблюдатель за файлами опроса вместо CoreFx FileSystemWatcher . Используется при просмотре файлов в сетевых ресурсах или подключенных томах Docker. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
По умолчанию dotnet watch оптимизирует сборку, избегая таких операций, как выполнение восстановления или повторное вычисление набора отслеживаемых файлов при каждом изменении файла. Если задано значение "1" или "true", эти оптимизации отключены. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run пытается запустить браузеры для веб-приложений с настроенным launchBrowser в launchSettings.json . Если задано значение "1" или "true", это поведение подавляется. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run пытается обновить браузеры при обнаружении изменений файлов. Если задано значение "1" или "true", это поведение подавляется. Это поведение также подавляется, если DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER задано. |
Обновление браузера
dotnet watch
внедряет скрипт в приложение, позволяющее обновить браузер при изменении содержимого. В некоторых сценариях, таких как когда приложение включает сжатие ответов, dotnet watch
может не быть в состоянии внедрить скрипт. В таких случаях при разработке приложения, вручную вставьте скрипт в приложение. Например, чтобы настроить веб-приложение для внедрения скрипта вручную, обновите файл макета, чтобы включить _framework/aspnet-browser-refresh.js
:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Символы, отличные от ASCII
Visual Studio 17.2 или более поздней версии включает пакет SDK для .NET 6.0.300 или более поздней версии. С помощью .NET SDK версии 6.0.300 и позже dotnet-watch
выводит символы, отличные от ASCII, на консоль во время сеанса горячей перезагрузки. На некоторых консольных хостах, таких как консоль Windows, эти символы могут отображаться искаженными. Чтобы избежать искажённых символов, рассмотрите один из следующих подходов:
-
DOTNET_WATCH_SUPPRESS_EMOJIS=1
Настройте переменную среды для подавления этих значений. - Переключитесь на другой терминал, например https://github.com/microsoft/terminal, который поддерживает отрисовку символов, отличных от ASCII.
ASP.NET Core