dotnet watch
Ten artykuł dotyczy: ✔️ .NET Core 3.1 SDK i nowsze wersje
Nazwa
dotnet watch
— Uruchamia ponownie lub ponownie ładuje określoną aplikację lub uruchamia określone polecenie dotnet po wykryciu zmian w kodzie źródłowym.
Streszczenie
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Opis
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
, a zmiana jest obsługiwana w przypadku ponownego ładowania na gorąco, ponownie ładuje określoną aplikację. Jeśli zmiana nie jest obsługiwana, spowoduje to ponowne uruchomienie aplikacji. 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.
Kompresja odpowiedzi
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. Może 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 języka JavaScript do stron aplikacji w przeglądarce:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Argumenty
command
dotnet watch
Może uruchamiać dowolne polecenie, które jest wysyłane za pośrednictwem pliku wykonywalnego, takiego jak wbudowane polecenia interfejsudotnet
wiersza polecenia i narzędzia globalne. Jeśli możesz uruchomić poleceniedotnet <command>
, możesz uruchomić poleceniedotnet watch <command>
. Jeśli nie określono polecenia podrzędnego, wartość domyślna torun
dotnet run
.forwarded arguments
Argumenty podane po podwójnej kreski (
--
) są przekazywane do procesu podrzędnegodotnet
. Jeśli używasz poleceniadotnet watch run
, te argumenty są opcjami dla polecenia dotnet run. Jeśli używasz poleceniadotnet watch test
, te argumenty są opcjami dla testu dotnet.
Opcje
--list
Wyświetla listę wszystkich odnalezionych plików bez uruchamiania obserwatora.
--no-hot-reload
Pomijanie ponownego ładowania 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 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, domyślnie jest to bieżący katalog.
-q|--quiet
Pomija wszystkie dane wyjściowe generowane przez polecenie z
dotnet watch
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
Przedstawia pełne dane wyjściowe na potrzeby debugowania.
--version
Pokazuje wersję programu
dotnet watch
.--
Opcja podwójnej kreski ('--') może służyć do rozdzielania
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
uznaje pierwszy nierozpoznany argument jako początek argumentów, które powinny zostać przekazane do procesu podrzędnegodotnet
.
Zmienne środowiskowe
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 w przypadku 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 PollingFileChangeToken.DOTNET_WATCH
dotnet watch
ustawia tę zmienną na1
dla wszystkich procesów podrzędnych, które uruchamia.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
W ramach
dotnet watch
programu mechanizm 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 odświeża przeglądarek podczas wykrywania zmian plików.DOTNET_WATCH_SUPPRESS_EMOJIS
W przypadku zestawu .NET SDK 6.0.300 lub nowszego
dotnet watch
do konsoli emituje znaki inne niż ASCII, 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ą pojawić się zwieńczone. Aby uniknąć wyświetlania zwijanych znaków, ustaw tę zmienną na
1
wartość lubtrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Jeśli jest ustawiona wartość
1
lubtrue
,dotnet watch
nie będzie uruchamiać ani odświeżać przeglądarek dla aplikacji internetowych skonfigurowanychlaunchBrowser
w pliku 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 przy 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
1
wartość 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
1
wartość lubtrue
,dotnet watch
zawsze będzie ponownie uruchamiać się w niegrzecznych edycjach zamiast pytać.
Pliki obserwowane domyślnie
dotnet watch
program 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 grupy Compile
i EmbeddedResource
zawierają wszystkie pliki pasujące do następujących wzorców globu:
**/*.cs
*.csproj
**/*.resx
- Pliki zawartości w aplikacjach internetowych:
wwwroot/**
Domyślnie pliki.configi json nie wyzwalają watch dotnet, ponieważ system konfiguracji ma własne mechanizmy obsługi zmian konfiguracji.
Pliki można dodać do listy watch lub usunąć z listy, edytując plik projektu. Pliki można określać indywidualnie lub za pomocą wzorców globu.
Obejrzyj dodatkowe pliki
Więcej plików można obserwować, dodając elementy do Watch
grupy. Na przykład następujące znaczniki rozszerzają tę grupę w celu uwzględnienia plików JavaScript:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Ignoruj określone pliki
dotnet watch
polecenie zignoruje Compile
element 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
Polecenie spowoduje zignorowanie odwołań do projektu, które mają Watch="false"
atrybut , jak pokazano w poniższym przykładzie:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Konfiguracja zaawansowana
dotnet watch
wykonuje kompilację w czasie projektowania, aby znaleźć elementy do watch. 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>
Gorące ponowne ładowanie
Począwszy od platformy .NET 6, dotnet watch
obejmuje obsługę przeładowywania na gorąco. Ponowne ładowanie na gorąco to funkcja umożliwiająca stosowanie zmian w uruchomionej aplikacji bez konieczności ponownego kompilowania i ponownego uruchamiania. Zmiany mogą dotyczyć plików kodu lub zasobów statycznych, takich jak pliki arkusza stylów i pliki JavaScript. Ta funkcja usprawnia lokalne środowisko programistyczne, ponieważ natychmiast przekazuje opinię podczas modyfikowania aplikacji.
Aby uzyskać informacje o typach aplikacji i wersjach platformy .NET, które obsługują przeładowywanie na gorąco, zobacz Obsługiwane platformy aplikacji .NET i scenariusze.
Niegrzeczne edycje
Po zmodyfikowaniu pliku określa, dotnet watch
czy aplikacja może być ładowana ponownie. Jeśli nie można go ponownie załadować na gorąco, zmiana jest nazywana niegrzeczną edycją 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 edycje.
Aby uzyskać informacje o rodzajach zmian uważanych za niegrzeczne edycje, zobacz Edytowanie kodu i kontynuowanie debugowania oraznieobsługiwane zmiany w kodzie.
Aby wyłączyć ponowne ładowanie podczas uruchamiania polecenia dotnet watch
, użyj --no-hot-reload
opcji , jak pokazano w poniższym przykładzie:
dotnet watch --no-hot-reload
Przykłady
Uruchom
dotnet run
dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy zmieni się:dotnet watch
Lub:
dotnet watch run
Uruchom
dotnet test
dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy zmieni się:dotnet watch test
Uruchamiaj
dotnet run --project ./HelloWorld.csproj
za każdym razem, gdy kod źródłowy zmieni się:dotnet watch run --project ./HelloWorld.csproj
Uruchom
dotnet run -- arg0
dla projektu w bieżącym katalogu za każdym razem, gdy kod źródłowy zmieni się:dotnet watch run -- arg0
Lub:
dotnet watch -- run arg0
Zobacz też
- Samouczek: tworzenie aplikacji ASP.NET Core przy użyciu obserwatora plików
- Ponowne ładowanie na gorąco w programie Visual Studio
- Ponowne ładowanie obsługiwanych aplikacji
- Przeładuj ponownie obsługiwane zmiany kodu
- Przeładowywanie ponownego ładowania wykonania testu
- Obsługa ponownego ładowania na gorąco dla ASP.NET Core
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla