dotnet watch
Ten artykuł dotyczy: ✔️ zestaw .NET Core 3.1 SDK i nowsze wersje
dotnet watch
— Uruchamia ponownie lub ponownie ładuje określoną aplikację lub uruchamia określone polecenie dotnet po wykryciu zmian w kodzie źródłowym.
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Polecenie dotnet watch
jest obserwatorem plików. Po wykryciu zmiany uruchamia dotnet run
polecenie lub określone dotnet
polecenie. Jeśli zostanie uruchomiona dotnet run
funkcja , a zmiana jest obsługiwana w przypadku ponownego ładowania na gorąco, ponownie załaduje określoną aplikację. Jeśli zmiana nie jest obsługiwana, uruchomi ponownie aplikację. Ten proces umożliwia szybkie iteracyjne programowanie z poziomu wiersza polecenia.
Podczas uruchamiania dotnet watch
polecenia możesz wymusić ponowne skompilowanie i ponowne uruchomienie aplikacji, naciskając klawisze Ctrl+R w powłoce poleceń. Ta funkcja jest dostępna tylko wtedy, gdy aplikacja jest uruchomiona. Jeśli na przykład uruchomisz polecenie dotnet watch
w aplikacji konsolowej, która kończy się przed naciśnięciem klawiszy Ctrl+R, naciśnięcie klawiszy Ctrl+R nie ma żadnego wpływu. Jednak w takim przypadku dotnet watch
nadal obserwuje pliki i uruchomi ponownie aplikację, jeśli plik zostanie zaktualizowany.
Jeśli dotnet watch
zostanie uruchomiona aplikacja korzystająca z kompresji odpowiedzi, narzędzie nie może wstrzyknąć skryptu odświeżania przeglądarki. W programie .NET 7 lub nowszej wersji narzędzia zostanie wyświetlony komunikat ostrzegawczy podobny do następującego:
ostrzegaj: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Nie można skonfigurować iniekcji skryptu odświeżania przeglądarki w odpowiedzi. Mogło to być spowodowane przez kodowanie zawartości odpowiedzi: "br". Rozważ wyłączenie kompresji odpowiedzi.
Alternatywą dla wyłączenia kompresji odpowiedzi jest ręczne dodanie odwołania do kodu JavaScript odświeżania przeglądarki na stronach aplikacji:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
<command>
W zestawie .NET 7 SDK i starszych wersjach
dotnet watch
można uruchomić dowolne polecenie wysyłane za pośrednictwem pliku wykonywalnego, takie jak wbudowane polecenia interfejsudotnet
wiersza polecenia i narzędzia globalne. Jeśli możesz uruchomić polecenie , możesz uruchomićdotnet <command>
poleceniedotnet watch <command>
.W zestawie .NET 8 SDK lub nowszym
dotnet watch
można uruchomić poleceniedotnet run
,dotnet build
lubdotnet test
. Określrun
wartość ,build
lubtest
dla .<command>
Jeśli polecenie podrzędne nie jest określone, wartość domyślna to
run
dotnet run
.<forwarded arguments>
Argumenty podane po podwójnej kreski (
--
) są przekazywane do procesu podrzędnegodotnet
. Jeśli używaszdotnet watch run
polecenia , te argumenty są opcjami dla polecenia dotnet run. Jeśli używaszdotnet watch test
polecenia , te argumenty są opcjami testu dotnet.
--list
Wyświetla listę wszystkich odnalezionych plików bez uruchamiania obserwatora.
--no-hot-reload
Pomiń przeładowywanie na gorąco dla obsługiwanych aplikacji.
--non-interactive
Działa
dotnet watch
w trybie nieinterakcyjnym. Użyj tej opcji, aby zapobiec żądaniu danych wejściowych konsoli. Po włączeniu ponownego ładowania na gorąco i wykryciu niegrzecznego edytowania funkcja dotnet watch ponownie uruchamia aplikację. Dostępne od zestawu .NET 7 SDK.--project <PATH>
Określa ścieżkę pliku projektu do uruchomienia (tylko folder lub dołączenie nazwy pliku projektu). Jeśli nie zostanie określony, zostanie on domyślnie określony w bieżącym katalogu.
-q|--quiet
Pomija wszystkie dane wyjściowe generowane przez
dotnet watch
polecenie z wyjątkiem ostrzeżeń i błędów. Opcja nie jest przekazywana do poleceń podrzędnych. Na przykład dane wyjściowe zdotnet restore
idotnet run
nadal są danymi wyjściowymi.-v|--verbose
Wyświetla pełne dane wyjściowe na potrzeby debugowania.
--version
Pokazuje wersję programu
dotnet watch
.--
Opcja podwójnej kreski ('--') może służyć do rozdzielenia
dotnet watch
opcji z argumentów, które zostaną przekazane do procesu podrzędnego. Jego użycie jest opcjonalne. Jeśli opcja podwójnej kreski nie jest używana,dotnet watch
uważa, że pierwszym nierozpoznanym argumentem jest początek argumentów, które powinny zostać przekazane do procesu podrzędnegodotnet
.
dotnet watch
używa następujących zmiennych środowiskowych:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Ta wartość jest konfigurowana przez
dotnet watch
czas uruchamiania aplikacji i określa nazwany potok.DOTNET_USE_POLLING_FILE_WATCHER
Jeśli jest ustawiona wartość
1
lubtrue
,dotnet watch
używa obserwatora plików sondowania zamiast System.IO.FileSystemWatcher. Sondowanie jest wymagane dla niektórych systemów plików, takich jak udziały sieciowe, woluminy zainstalowane na platformie Docker i inne wirtualne systemy plików. Klasa PhysicalFileProvider używaDOTNET_USE_POLLING_FILE_WATCHER
metody do określenia, czy PhysicalFileProvider.Watch metoda będzie polegać na PollingFileChangeTokenobiekcie .DOTNET_WATCH
dotnet watch
Ustawia tę zmienną na1
wartość dla wszystkich procesów podrzędnych, które uruchamia.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
W ramach
dotnet watch
programu mechanizm odświeżania serwera odświeżania przeglądarki odczytuje tę wartość w celu określenia środowiska hosta protokołu WebSocket. Wartość127.0.0.1
jest zastępowana przezlocalhost
, ahttp://
schematy ihttps://
są zastępowane odpowiednio iws://
wss://
.DOTNET_WATCH_ITERATION
dotnet watch
Ustawia tę zmienną na1
i zwiększa się o jeden za każdym razem, gdy plik jest zmieniany, a polecenie uruchamia się ponownie lub ponownie ładuje aplikację.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
Jeśli jest ustawiona wartość
1
lubtrue
,dotnet watch
nie będzie odświeżać przeglądarek, gdy wykryje zmiany plików.DOTNET_WATCH_SUPPRESS_EMOJIS
W przypadku zestawu .NET SDK 6.0.300 lub nowszego
dotnet watch
emituje znaki inne niż ASCII do konsoli, jak pokazano w poniższym przykładzie: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...
Na niektórych hostach konsoli te znaki mogą być wyświetlane w postaci zwijania. Aby uniknąć wyświetlania niezwiązanych znaków, ustaw tę zmienną na
1
lubtrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
W przypadku ustawienia na
1
lubdotnet watch
true
program nie uruchamia ani nie odświeża przeglądarek dla aplikacji internetowych skonfigurowanychlaunchBrowser
w launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Domyślnie optymalizuje kompilację,
dotnet watch
unikając niektórych operacji, takich jak uruchamianie przywracania lub ponowne ocenianie zestawu obserwowanych plików na każdej zmianie pliku. Jeśli ta zmienna jest ustawiona na1
lubtrue
, te optymalizacje są wyłączone.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Jeśli jest ustawiona wartość
1
lubtrue
,dotnet watch
nie będzie wykonywać specjalnej obsługi plików zawartości statycznej.dotnet watch
Ustawia właściwośćDotNetWatchContentFiles
MSBuild nafalse
wartość .DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Gdy jest ustawiona wartość
1
lubtrue
,dotnet watch
zawsze uruchamia się ponownie w niegrzecznych edycjach zamiast pytać.
dotnet watch
obserwuje wszystkie elementy w Watch
grupie elementów w pliku projektu. Domyślnie ta grupa zawiera wszystkie elementy w grupach Compile
i EmbeddedResource
. dotnet watch
Skanuje również cały graf odwołań do projektu i obserwuje wszystkie pliki w tych projektach.
Domyślnie Compile
grupy i EmbeddedResource
obejmują wszystkie pliki pasujące do następujących wzorców globu:
**/*.cs
*.csproj
**/*.resx
- Pliki zawartości w aplikacjach internetowych:
wwwroot/**
Domyślnie pliki .config i .json nie wyzwalają ponownego uruchomienia zegarka dotnet, ponieważ system konfiguracji ma własne mechanizmy obsługi zmian konfiguracji.
Pliki można dodać do listy obserwowanych lub usunąć z listy, edytując plik projektu. Pliki można określić indywidualnie lub za pomocą wzorców globu.
Więcej plików można obserwować, dodając elementy do Watch
grupy. Na przykład następujące znaczniki rozszerzają grupę w celu uwzględnienia plików JavaScript:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
dotnet watch
element zignoruje Compile
i EmbeddedResource
elementy, które mają Watch="false"
atrybut, jak pokazano w poniższym przykładzie:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch
Program zignoruje odwołania do projektu, które mają Watch="false"
atrybut, jak pokazano w poniższym przykładzie:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
dotnet watch
wykonuje kompilację w czasie projektowania, aby znaleźć elementy do obejrzenia. Po uruchomieniu dotnet watch
tej kompilacji ustawia właściwość DotNetWatchBuild=true
. Tej właściwości można użyć, jak pokazano w poniższym przykładzie:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Począwszy od platformy .NET 6, dotnet watch
obejmuje obsługę przeładowywania na gorąco. Przeładowywanie na gorąco to funkcja umożliwiająca stosowanie zmian do uruchomionej aplikacji bez konieczności ponownego kompilowania i ponownego uruchamiania. Zmiany mogą dotyczyć plików kodu lub statycznych zasobów, takich jak pliki arkusza stylów i pliki JavaScript. Ta funkcja usprawnia lokalne środowisko programistyczne, ponieważ natychmiast przekazuje opinie podczas modyfikowania aplikacji.
Aby uzyskać informacje na temat typów aplikacji i wersji platformy .NET, które obsługują przeładowywanie na gorąco, zobacz Obsługiwane platformy aplikacji platformy .NET i scenariusze.
Po zmodyfikowaniu pliku określa, dotnet watch
czy aplikacja może być ładowana ponownie. Jeśli nie można go ponownie załadować, zmiana jest nazywana niegrzecznym edytowaniem i dotnet watch
pyta, czy chcesz ponownie uruchomić aplikację:
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)?
- Tak: uruchamia ponownie aplikację.
- Nie: pozostawia aplikację uruchomioną bez zastosowanych zmian.
- Zawsze: uruchamia ponownie aplikację i nie monituje już o niegrzeczne zmiany.
- Nigdy: pozostawia aplikację uruchomioną bez zastosowanych zmian i nie monituje już o niegrzeczne zmiany.
Aby uzyskać informacje o rodzajach zmian, które są uznawane za niegrzeczne zmiany, zobacz Edytowanie kodu i kontynuowanie debugowania i nieobsługiwane zmiany w kodzie.
Aby wyłączyć ponowne ładowanie podczas uruchamiania dotnet watch
--no-hot-reload
polecenia , użyj opcji , jak pokazano w poniższym przykładzie:
dotnet watch --no-hot-reload
Uruchom
dotnet run
polecenie dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy ulegnie zmianie:dotnet watch
Lub:
dotnet watch run
Uruchom
dotnet test
polecenie dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy ulegnie zmianie:dotnet watch test
Uruchom
dotnet run --project ./HelloWorld.csproj
zawsze, gdy kod źródłowy ulegnie zmianie:dotnet watch run --project ./HelloWorld.csproj
Uruchom
dotnet run -- arg0
polecenie dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy ulegnie zmianie:dotnet watch run -- arg0
Lub:
dotnet watch -- run arg0
- Samouczek: tworzenie aplikacji ASP.NET Core przy użyciu obserwatora plików
- Ponowne ładowanie na gorąco w programie Visual Studio
- Gorące ponowne ładowanie obsługiwanych aplikacji
- Przeładowywanie na gorąco obsługiwanych zmian kodu
- Wykonywanie testu przeładowywania na gorąco
- Obsługa ponownego ładowania na gorąco dla platformy ASP.NET Core
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: