Vývoj aplikací ASP.NET Core pomocí sledovacího nástroje pro soubory
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
). 9
Vrátí , ne 20
tak, 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.Tools
Přidejte do souboru odkaz na.csproj
balíček:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
Nainstalujte balíček
Microsoft.DotNet.Watcher.Tools
pomocí 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 watch
příkazu . Příklad:
Příkaz | Příkaz s hodinkami |
---|---|
dotnet run | dotnet watch run |
dotnet run -f netcoreapp3.1 | 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 indikuje watch
, že 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 tomu příkaz kukátku vloží middleware do aplikace, která upraví odpovědi HTML vytvořené aplikací. Middleware přidá na stránku blok skriptu JavaScriptu, který umožňuje dotnet watch
prohlížeči dát pokyn k aktualizaci. Změny všech sledovaných souborů, včetně statického obsahu, jako .html
jsou soubory, .css
v současné době způsobují, že se aplikace znovu sestaví.
dotnet watch
:
- Sleduje pouze soubory, které mají vliv na sestavení ve výchozím nastavení.
- 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 tématu 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 se také spustí a bude sledovat projekt webové aplikace .
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
se zjistila změna souboru a restartovala 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
Product
MathController.cs
zpět na vrácení součtu. 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.
Product
Opravte 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í sleduje všechny soubory odpovídající dotnet-watch
následujícím vzorům globu:
**/*.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 vlastních hodinek je možné vytvořit pro zpracování různých scénářů. Zvažte následující rozložení projektu:
- Test/
UnitTests/UnitTests.csproj
IntegrationTests/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 sledovací proces souboru 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í optimalizuje sestavení tím, že zabrání určitým operacím, dotnet watch jako je spuštění obnovení nebo opětovné 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 pokusy o spuštění prohlížečů pro webové aplikace s launchBrowser nakonfigurovaným nástrojem 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 watch
nemusí 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 a novější obsahuje sadu .NET SDK 6.0.300 a novější. Se sadou .NET SDK a 6.0.300 novějším dotnet-watch
vygeneruje do konzoly 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=1
prostř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.