Udostępnij za pośrednictwem


dotnet watch

Ten artykuł dotyczy: ✔️ zestaw .NET Core 3.1 SDK i nowsze wersje

Nazwisko

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 runfunkcja , 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 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. 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>
}

Argumenty

  • <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 interfejsu dotnet wiersza polecenia i narzędzia globalne. Jeśli możesz uruchomić polecenie , możesz uruchomić dotnet <command>polecenie dotnet watch <command>.

    W zestawie .NET 8 SDK lub nowszym dotnet watch można uruchomić polecenie dotnet run, dotnet buildlub dotnet test. Określ runwartość , buildlub test dla .<command>

    Jeśli polecenie podrzędne nie jest określone, 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 dotnet watch runpolecenia , te argumenty są opcjami dla polecenia dotnet run. Jeśli używasz dotnet watch testpolecenia , te argumenty są opcjami testu dotnet.

Opcje

  • --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 z dotnet restore i dotnet 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ę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 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żywa DOTNET_USE_POLLING_FILE_WATCHER metody do określenia, czy PhysicalFileProvider.Watch metoda będzie polegać na PollingFileChangeTokenobiekcie .

  • DOTNET_WATCH

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

  • DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME

    W ramach dotnet watchprogramu 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 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 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 lub true.

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    W przypadku ustawienia na 1 lub dotnet watchtrueprogram nie uruchamia ani nie odświeża przeglądarek dla aplikacji internetowych skonfigurowanych launchBrowser 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 na 1 lub true, te optymalizacje są wyłączone.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    Jeśli jest ustawiona wartość 1 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 wartość 1 lub true, dotnet watch zawsze uruchamia się ponownie w niegrzecznych edycjach zamiast pytać.

Pliki obserwowane domyślnie

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.

Obejrzyj dodatkowe pliki

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>

Ignoruj określone pliki

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>

Konfiguracja zaawansowana

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>

Gorące ponowne ładowanie

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.

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ć, 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 

Przykłady

  • 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
    

Zobacz też