Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Эта статья относится к: ✔️ пакету SDK для .NET 6 и более поздних версий
Имя
dotnet watch — Перезапуск или горячая перезагрузка указанного приложения или выполнение указанной команды dotnet при обнаружении изменений в исходном коде.
Synopsis
dotnet watch [<command>]
[--artifacts-path <ARTIFACTS_DIR>] [--disable-build-servers]
[--list] [--no-hot-reload] [--no-self-contained]
[--non-interactive] [--project <PROJECT>] [--sc|--self-contained]
[-q|--quiet] [-v|--verbose] [--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Description
Команда dotnet watch — это наблюдатель за файлами. При обнаружении изменения выполняется dotnet run команда или указанная dotnet команда. Если оно выполняется dotnet run, а изменение поддерживается для горячей перезагрузки, оно перезагрузит указанное приложение. Если изменение не поддерживается, он перезапускает приложение. Этот процесс обеспечивает быструю итеративную разработку из командной строки.
Во время выполнения dotnet watchможно принудительно перестроить и перезапустить приложение, нажав клавиши CTRL+R в командной оболочке. Эта функция доступна только во время работы приложения. Например, если вы запускаете dotnet watch консольное приложение, которое заканчивается перед нажатием клавиш CTRL+R, нажатие клавиш CTRL+R не влияет. Однако в этом случае dotnet watch все еще просматривает файлы и перезапустит приложение, если файл обновлен.
Сжатие ответов
Если dotnet watch выполняется для приложения, использующего сжатие ответов, средство не может внедрить скрипт обновления браузера. В .NET 7 и более поздней версии средства отображается предупреждение, как показано ниже:
warn: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Не удается настроить внедрение скрипта обновления браузера в ответе. Это может быть вызвано кодировкой содержимого ответа: br. Рассмотрите возможность отключения сжатия ответов.
В качестве альтернативы отключению сжатия ответов вручную добавьте ссылку на JavaScript на страницы приложения:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Arguments
<command>В пакете SDK для .NET 7 и более ранних
dotnet watchверсий можно выполнить любую команду, которая отправляется через исполняемыйdotnetфайл, например встроенные команды CLI и глобальные средства. Если вы можете запуститьdotnet <command>, можно запуститьdotnet watch <command>.В пакете SDK для .NET 8 и более поздних
dotnet watchверсий может выполнятьсяdotnet runилиdotnet builddotnet test. Укажитеrun,buildилиtestдля<command>.Если дочерняя команда не указана, используется
rundotnet runзначение по умолчанию.<forwarded arguments>Аргументы, предоставленные после двойного дефиса (
--) передаются дочернемуdotnetпроцессу. Если вы работаетеdotnet watch run, эти аргументы являются вариантами выполнения dotnet. Если вы работаетеdotnet watch test, эти аргументы являются вариантами для dotnet test.
Options
-
--artifacts-path <ARTIFACTS_DIR>Все выходные файлы сборки из выполняемой команды будут отправляться в вложенные папки в соответствии с указанным путем, разделенным проектом. Дополнительные сведения см. в макете выходных данных артефактов. Доступно с пакета SDK для .NET 8.
-
--disable-build-serversПринудительно заставляет команду игнорировать все постоянные серверы сборки. Этот параметр предоставляет согласованный способ отключить все использование кэширования сборки, которая заставляет сборку с нуля. Сборка, которая не зависит от кэшей, полезна, когда кэши могут быть повреждены или неверны по какой-то причине. Доступно с пакета SDK для .NET 7.
--listВыводит список всех обнаруженных файлов без запуска наблюдателя.
-
--no-self-containedОпубликуйте приложение в качестве приложения, зависящее от платформы. Для запуска приложения необходимо установить совместимую среду выполнения .NET на целевом компьютере.
--no-hot-reloadОтключение горячей перезагрузки для поддерживаемых приложений.
--non-interactiveВыполняется
dotnet watchв неинтерактивном режиме. Используйте этот параметр, чтобы запретить запрашивать входные данные консоли. Если включена горячая перезагрузка и обнаружена грубое изменение , dotnet watch перезапускает приложение. Доступно с пакета SDK для .NET 7.--project <PATH>Указывает путь к файлу проекта для запуска (только папка или имя файла проекта). Если значение не задано, по умолчанию используется текущий каталог.
-
--sc|--self-containedОпубликуйте среду выполнения .NET в приложении, чтобы среда выполнения не должна быть установлена на целевом компьютере.
-q|--quietПодавляет все выходные данные, созданные командой
dotnet watch, за исключением предупреждений и ошибок. Параметр не передается дочерним командам. Например, выходные данные изdotnet restoreиdotnet runдальше будут выводиться.-v|--verboseОтображает подробные выходные данные для отладки.
--versionПоказывает версию
dotnet watch.--Параметр double-dash ('--) можно использовать для разделителя
dotnet watchпараметров от аргументов, которые будут переданы дочернему процессу. Его использование является необязательным. Если параметр двойного дефиса не используется,dotnet watchсчитает первый нераспознанный аргумент началом аргументов, которые он должен передать в дочернийdotnetпроцесс.-
-?|-h|--helpВыводит описание использования команды.
Переменные среды
dotnet watch использует следующие переменные среды:
DOTNET_HOTRELOAD_NAMEDPIPE_NAMEЭто значение настраивается
dotnet watchпри запуске приложения и указывает именованный канал.DOTNET_USE_POLLING_FILE_WATCHERЕсли задано
1значение илиtrueиспользуетсяdotnet watchнаблюдатель за файлами опроса, а не System.IO.FileSystemWatcher. Опрос требуется для некоторых файловых систем, таких как сетевые ресурсы, подключенные тома Docker и другие виртуальные файловые системы. Класс PhysicalFileProvider используетсяDOTNET_USE_POLLING_FILE_WATCHERдля определения того, будет ли PhysicalFileProvider.Watch метод полагаться на PollingFileChangeToken.DOTNET_WATCHdotnet watchЗадает эту переменную1для всех дочерних процессов, которые он запускает.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAMEВ рамках
dotnet watchмеханизма обновления браузера считывает это значение, чтобы определить среду узла WebSocket. Значение заменяется127.0.0.1, аlocalhosthttp://схемы заменяются иhttps://ws://соответственно.wss://DOTNET_WATCH_ITERATIONdotnet watchзадает эту переменную1и увеличивается по одному при каждом изменении файла, а команда перезапускает или перезагружает приложение.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESHЕсли задано
1значение илиtrueнеdotnet watchобновляет браузеры при обнаружении изменений файлов.DOTNET_WATCH_SUPPRESS_EMOJISПри использовании пакета SDK для .NET версии 6.0.300 и более поздних
dotnet watchверсий в консоль отправляется символы, отличные от ASCII, как показано в следующем примере:dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. 💡 Press "Ctrl + R" to restart. dotnet watch 🔧 Building... dotnet watch 🚀 Started dotnet watch ⌚ Exited dotnet watch ⏳ Waiting for a file to change before restarting dotnet...На определенных узлах консоли эти символы могут отображаться с развязкой. Чтобы избежать просмотра символов с грифом, задайте для этой переменной
1значение илиtrue.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSERЕсли задано
1значение илиtrueнеdotnet watchбудет запускать или обновлять браузеры для веб-приложений,launchBrowserнастроенных в launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISMПо умолчанию оптимизирует сборку,
dotnet watchизбегая определенных операций, таких как выполнение восстановления или повторное вычисление набора отслеживаемых файлов при каждом изменении файла. Если эта переменная задана1илиtrueотключена, эти оптимизации отключены.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLINGЕсли задано
1значение илиtrueнеdotnet watchбудет выполнять специальную обработку статических файлов содержимого.dotnet watchзадает для свойства MSBuild значениеDotNetWatchContentFilesfalse.DOTNET_WATCH_RESTART_ON_RUDE_EDITЕсли задано
1значение илиtrue,dotnet watchвсегда перезапускается при грубых изменениях вместо запроса.
Файлы, отслеживаемые по умолчанию
dotnet watch просматривает все элементы в Watch группе элементов в файле проекта. По умолчанию эта группа содержит все элементы в группах Compile и EmbeddedResource группах.
dotnet watch также сканирует весь график ссылок на проект и просматривает все файлы в этих проектах.
По умолчанию группы CompileEmbeddedResource включают все файлы, соответствующие следующим шаблонам глобов:
**/*.cs*.csproj**/*.resx- Файлы содержимого в веб-приложениях:
wwwroot/**
По умолчанию .configи .json файлы не активируют перезапуск dotnet watch, так как система конфигурации имеет собственные механизмы обработки изменений конфигурации.
Файлы можно добавить в список наблюдения или удалить из списка, изменив файл проекта. Файлы можно указать по отдельности или с помощью шаблонов glOB-объектов.
Просмотр дополнительных файлов
Дополнительные файлы можно просмотреть, добавив элементы в группу Watch . Например, следующая разметка расширяет группу для включения файлов JavaScript:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Игнорировать указанные файлы и папки
Используйте атрибут, чтобы игнорировать указанные Watch="false" файлы.
DefaultItemExcludes Используйте свойство, чтобы игнорировать просмотр папок или файлов.
Чтобы предотвратить dotnet watch просмотр файлов, используйте CompileEmbeddedResource элементы с атрибутом Watch="false" , как показано в следующем примере:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch Игнорирует ссылки на проекты, имеющие Watch="false" атрибут, как показано в следующем примере:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Начиная с .NET 10, используйте DefaultItemExcludes свойство, чтобы исключить все папки или шаблоны файлов из отслеживания dotnet watch. Этот подход полезен, если вы хотите исключить файлы, которые не относятся к компиляции или файлам, которые активируют нежелательные перезапуски или перезагрузки.
Например, файлы в папке App_Data приложений ASP.NET Core могут изменяться во время выполнения приложения, что приводит к ненужным перезагрузкам страниц. Исключите эту папку из отслеживания:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**</DefaultItemExcludes>
</PropertyGroup>
Исключите несколько шаблонов, разделив их точкой с запятой:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**;**/temp/**;**/*.log</DefaultItemExcludes>
</PropertyGroup>
Свойство DefaultItemExcludes влияет на все типы элементов по умолчанию, например Compile и EmbeddedResource. Атрибут Watch="false" обеспечивает более точный контроль над определенными файлами или ссылками на проекты.
Дополнительные сведения см. в справочнике по DefaultItemExcludes.
Расширенная конфигурация
dotnet watch выполняет сборку во время разработки, чтобы найти элементы для просмотра. При выполнении dotnet watch этой сборки задает свойство DotNetWatchBuild=true. Это свойство можно использовать, как показано в следующем примере:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Быстрая перезагрузка
Начиная с пакета SDK для .NET 6, dotnet watch включает поддержку горячей перезагрузки. Горячая перезагрузка — это функция, которая позволяет применять изменения к работающему приложению без необходимости перестроить и перезапустить его. Изменения могут быть в файлах кода или статических ресурсах, таких как файлы таблицы стилей и файлы JavaScript. Эта функция упрощает локальную разработку, так как она дает немедленную обратную связь при изменении приложения.
Сведения о типах приложений и версиях .NET, поддерживающих горячую перезагрузку, см. в статье "Поддерживаемые платформы и сценарии приложений .NET".
Грубые изменения
При изменении файла определяет, dotnet watch можно ли перезагрузить приложение. Если это не может быть горячей перезагрузкой, изменение называется грубым изменением и dotnet watch спрашивает, хотите ли вы перезапустить приложение:
dotnet watch ⌚ Unable to apply hot reload because of a rude edit.
❔ Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?
- Да: перезапускает приложение.
- Нет. Оставляет приложение запущенным без изменений.
- Всегда: перезапускает приложение и больше не запрашивает грубые изменения.
- Никогда: оставляет приложение запущенным без изменений, и больше не запрашивает грубые изменения.
Сведения о том, какие типы изменений считаются грубыми изменениями, см. в статье "Изменение кода" и продолжение отладки и неподдерживаемых изменений в коде.
Чтобы отключить горячую dotnet watch перезагрузку при запуске--no-hot-reload, используйте этот параметр, как показано в следующем примере:
dotnet watch --no-hot-reload
Примеры
Запустите
dotnet runпроект в текущем каталоге всякий раз, когда изменяется исходный код:dotnet watchИли:
dotnet watch runЗапустите
dotnet testпроект в текущем каталоге всякий раз, когда изменяется исходный код:dotnet watch testЗапустите
dotnet run --project ./HelloWorld.csprojкаждый раз, когда изменяется исходный код:dotnet watch run --project ./HelloWorld.csprojЗапустите
dotnet run -- arg0проект в текущем каталоге всякий раз, когда изменяется исходный код:dotnet watch run -- arg0Или:
dotnet watch -- run arg0
См. также
- Руководство. Разработка приложений ASP.NET Core с помощью наблюдателя за файлами
- Горячая перезагрузка в Visual Studio
- Горячая перезагрузка поддерживаемых приложений
- Горячая перезагрузка поддерживаемых изменений кода
- Выполнение тестов горячей перезагрузки
- Поддержка горячей перезагрузки для ASP.NET Core