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 watchpolecenia 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 interfejsu dotnet wiersza polecenia i narzędzia globalne. Jeśli możesz uruchomić polecenie dotnet <command>, możesz uruchomić polecenie dotnet watch <command>. Jeśli nie określono polecenia podrzędnego, wartość domyślna to rundotnet run.

  • forwarded arguments

    Argumenty podane po podwójnej kreski (--) są przekazywane do procesu podrzędnego dotnet . Jeśli używasz polecenia dotnet watch run, te argumenty są opcjami dla polecenia dotnet run. Jeśli używasz polecenia dotnet 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 z dotnet restore i dotnet 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ędnego dotnet .

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 lub true, 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żywa DOTNET_USE_POLLING_FILE_WATCHER metody do określenia, czy PhysicalFileProvider.Watch metoda będzie polegać na PollingFileChangeToken.

  • DOTNET_WATCH

    dotnet watch ustawia tę zmienną na 1 dla wszystkich procesów podrzędnych, które uruchamia.

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    W ramach dotnet watchprogramu 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 przez localhost, a http:// schematy i https:// są zastępowane odpowiednio i ws://wss:// .

  • DOTNET_WATCH_ITERATION

    dotnet watch Ustawia tę zmienną na 1 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 lub true, 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ść lub true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    Jeśli jest ustawiona wartość 1 lub true, dotnet watch nie będzie uruchamiać ani odświeżać przeglądarek dla aplikacji internetowych skonfigurowanych launchBrowser 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 na 1 lub true, te optymalizacje są wyłączone.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Jeśli jest ustawiona 1 wartość lub true, dotnet watch nie będzie wykonywać specjalnej obsługi plików zawartości statycznej. dotnet watch Ustawia właściwość DotNetWatchContentFiles MSBuild na falsewartość .

  • DOTNET_WATCH_RESTART_ON_RUDE_EDIT

    Gdy jest ustawiona 1 wartość lub true, 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 watchwykonuje 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ż