Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rick Anderson a Victor Hurdugaci
dotnet watch je nástroj, který při změně zdrojových souborů spouští příkaz .NET CLI . Například změna souboru může aktivovat kompilaci, spuštění testu nebo nasazení.
Tento kurz používá existující webové rozhraní API se dvěma koncovými body: jedno, které vrací součet a jedno, které vrací produkt. Metoda produktu obsahuje chybu, která je opravena v tomto kurzu.
Stáhněte si ukázkovou aplikaci . Skládá se ze dvou projektů: Webová aplikace (webové rozhraní API ASP.NET Core) a WebAppTests (testy jednotek pro webové rozhraní API).
V příkazovém prostředí přejděte do složky Webové aplikace . Spusťte následující příkaz:
dotnet run
Poznámka:
Můžete použít dotnet run --project <PROJECT> k zadání projektu, který se má spustit. Například spuštění dotnet run --project WebApp z kořenového adresáře ukázkové aplikace také spustí projekt webové aplikace .
Výstup konzoly zobrazuje podobné zprávy (označující, že aplikace běží a čeká na žádosti):
$ dotnet run
Hosting environment: Development
Content root path: C:/Docs/aspnetcore/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Ve webovém prohlížeči přejděte na http://localhost:<port number>/api/math/sum?a=4&b=5. Měli byste vidět výsledek 9.
Přejděte do rozhraní API produktu (http://localhost:<port number>/api/math/product?a=4&b=5). Vrátí 9, ne 20, jak byste očekávali. Tento problém je opraven později v kurzu.
Přidání dotnet watch do projektu
Nástroj dotnet watch pro sledování souborů je součástí sady .NET Core SDK verze 2.1.300. Při použití starší verze sady .NET Core SDK se vyžadují následující kroky.
Microsoft.DotNet.Watcher.ToolsPřidejte do souboru odkaz na.csprojbalíček:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Nainstalujte balíček
Microsoft.DotNet.Watcher.Toolspomocí následujícího příkazu:dotnet restore
Spouštění příkazů rozhraní příkazového řádku .NET pomocí dotnet watch
Jakýkoli příkaz .NET CLI lze spustit pomocí dotnet watchpříkazu . Například:
| Příkaz | Příkaz s hodinkami |
|---|---|
| Příkaz dotnet run (spustit aplikaci .NET) | dotnet watch run |
| dotnet run -f netcoreapp3.1 | Příkaz pro spuštění aplikace pomocí příkazu dotnet: dotnet watch run -f netcoreapp3.1 |
| dotnet run -f netcoreapp3.1 -- --arg1 | dotnet watch run -f netcoreapp3.1 -- --arg1 |
| dotnet test | dotnet watch test |
Spusťte dotnet watch run ve složce webové aplikace . Výstup konzoly ukazuje, že watch se spustil.
Spuštění dotnet watch run ve webové aplikaci spustí prohlížeč, který po dokončení přejde na adresu URL aplikace.
dotnet watch to provede čtením výstupu konzoly aplikace a čekáním na připravenou zprávu zobrazenou uživatelem WebHost.
dotnet watch aktualizuje prohlížeč, když zjistí změny sledovaných souborů. K tomuto účelu vloží příkaz watch middleware do aplikace, který upraví HTML odpovědi vytvořené aplikací. Middleware přidá na stránku blok skriptu JavaScriptu, který umožňuje dotnet watch instruovat prohlížeč k aktualizaci. Změny všech sledovaných souborů, včetně statického obsahu, jako jsou soubory .html a .css, v současnosti způsobují, že se aplikace znovu sestaví.
dotnet watch:
- Ve výchozím nastavení sleduje pouze soubory, které mají vliv na sestavení.
- Všechny další sledované soubory (prostřednictvím konfigurace) stále mají za následek probíhající sestavení.
Další informace o konfiguraci naleznete v sekci dotnet-watch konfigurace v tomto dokumentu.
Poznámka:
Můžete použít dotnet watch --project <PROJECT> k zadání projektu, který se má sledovat. Například spuštění dotnet watch --project WebApp run z kořenového adresáře ukázkové aplikace také spustí a bude sledovat projekt WebApp.
Provádění změn pomocí dotnet watch
Ujistěte se, že dotnet watch je spuštěný.
Opravte chybu v Product metodě MathController.cs tak, aby vrátil produkt, a ne součet:
public static int Product(int a, int b)
{
return a * b;
}
Uložte soubor. Výstup konzoly označuje, že dotnet watch zjistil změnu souboru a restartoval aplikaci.
Ověřte http://localhost:<port number>/api/math/product?a=4&b=5 , že vrátí správný výsledek.
Spouštění testů pomocí dotnet watch
Změňte metodu
ProductMathController.cstak, aby vracela součet. Uložte soubor.V příkazovém prostředí přejděte do složky WebAppTests .
Spusťte dotnet restore.
Spusťte
dotnet watch test. Jeho výstup označuje, že test selhal a že sledovací proces čeká na změny souboru:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.ProductOpravte kód metody tak, aby vrátil produkt. Uložte soubor.
dotnet watch zjistí změnu souboru a znovu spustí testy. Výstup konzoly označuje úspěšné testy.
Přizpůsobení seznamu souborů ke sledování
Ve výchozím nastavení dotnet-watch sleduje všechny soubory odpovídající následujícím glob vzorům:
**/*.cs*.csproj**/*.resx- Soubory obsahu:
wwwroot/**,**/*.config,**/*.json
Do seznamu sledování můžete přidat další položky úpravou .csproj souboru. Položky lze zadat jednotlivě nebo pomocí vzorů globu.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Odhlášení souborů, které se mají sledovat
dotnet-watch je možné nakonfigurovat tak, aby ignorovala výchozí nastavení. Pokud chcete určité soubory ignorovat, přidejte Watch="false" do definice položky v .csproj souboru atribut:
<ItemGroup>
<!-- exclude Generated.cs from dotnet-watch -->
<Compile Include="Generated.cs" Watch="false" />
<!-- exclude Strings.resx from dotnet-watch -->
<EmbeddedResource Include="Strings.resx" Watch="false" />
<!-- exclude changes in this referenced project -->
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
<ItemGroup>
<!-- Exclude all Content items from being watched. -->
<Content Update="@(Content)" Watch="false" />
</ItemGroup>
Projekty vlastních hodinek
dotnet-watch není omezena na projekty jazyka C#. Projekty hodinek na zakázku je možné vytvořit k řešení různých scénářů. Zvažte následující rozložení projektu:
-
test/
UnitTests/UnitTests.csprojIntegrationTests/IntegrationTests.csproj
Pokud je cílem sledovat oba projekty, vytvořte vlastní soubor projektu nakonfigurovaný tak, aby sledoval oba projekty:
<Project>
<ItemGroup>
<TestProjects Include="**\*.csproj" />
<Watch Include="**\*.cs" />
</ItemGroup>
<Target Name="Test">
<MSBuild Targets="VSTest" Projects="@(TestProjects)" />
</Target>
<Import Project="$(MSBuildExtensionsPath)\Microsoft.Common.targets" />
</Project>
Pokud chcete spustit sledování souborů v obou projektech, přejděte do testovací složky. Spusťte následující příkaz:
dotnet watch msbuild /t:Test
VSTest se spustí, když se jakýkoli soubor změní v některém testovacím projektu.
konfigurace dotnet-watch
Některé možnosti konfigurace je možné předat dotnet watch prostřednictvím proměnných prostředí. Dostupné proměnné jsou:
| Nastavení | Popis |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Pokud je nastavená hodnota "1" nebo "true", dotnet watch použije místo CoreFx FileSystemWatcher systém sledování souborů pomocí dotazování. Používá se při sledování souborů v síťových sdílených složkách nebo připojených svazcích Dockeru. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Ve výchozím nastavení dotnet watch optimalizuje sestavení tím, že se vyhne určitým operacím, například spuštění obnovení nebo opětovného vyhodnocení sady sledovaných souborů při každé změně souboru. Pokud je nastavená hodnota 1 nebo true, tyto optimalizace jsou zakázány. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run se snaží spustit prohlížeče pro webové aplikace s launchBrowser nakonfigurovanými v launchSettings.json. Pokud je nastavená hodnota 1 nebo true, toto chování se potlačí. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run při zjišťování změn souborů se pokusí aktualizovat prohlížeče. Pokud je nastavená hodnota 1 nebo true, toto chování se potlačí. Toto chování je také potlačeno, pokud DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER je nastaveno. |
Aktualizace prohlížeče
dotnet watch vloží skript do aplikace, která umožňuje aktualizovat prohlížeč při změně obsahu. V některých scénářích, například když aplikace povolí kompresi odpovědí, dotnet watchnemusí být schopná vložit skript. V takových případech při vývoji ručně vložte skript do aplikace. Pokud chcete například nakonfigurovat webovou aplikaci tak, aby skript vložil ručně, aktualizujte soubor rozložení tak, aby zahrnoval _framework/aspnet-browser-refresh.js:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Jiné znaky než ASCII
Visual Studio 17.2 nebo novější obsahuje sadu .NET SDK 6.0.300 nebo novější. Se sadou .NET SDK verze 6.0.300 a novější dotnet-watch zobrazuje na konzoli znaky jiné než ASCII během relace opětovného načítání za provozu. U některých hostitelů konzoly, jako je například hostitel systému Windows, se tyto znaky můžou objevit zkomolené. Abyste se vyhnuli zkomoleným znakům, zvažte jeden z následujících přístupů:
- Nakonfigurujte proměnnou
DOTNET_WATCH_SUPPRESS_EMOJIS=1prostředí tak, aby potlačí generování těchto hodnot. - Přepněte na jiný terminál, například https://github.com/microsoft/terminal, který podporuje vykreslování znaků jiných než ASCII.