Vývoj ASP.NET Core aplikací pomocí služby File Watcher
Od Ricka Andersona a Odyma Hurd nesrozumite.
dotnet watch je nástroj, který spustí příkaz .NET Core CLI, když se změní zdrojové soubory. Například změna souboru může aktivovat kompilaci, spuštění testu nebo nasazení.
V tomto kurzu se používá existující webové rozhraní API se dvěma koncovými body: jedním, který vrací součet a jeden vrací produkt. Metoda produktu obsahuje chybu, která je v tomto kurzu opravená.
Stáhněte si ukázkovou aplikaci. Skládá se ze dvou projektů: Webová aplikace (ASP.NET Core webové rozhraní API) 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
Pomocí můžete dotnet run --project <PROJECT> určit projekt, který se má spustit. Například spuštění z kořenového adresáře ukázkové aplikace také dotnet run --project WebApp spustí projekt webové aplikace.
Výstup konzoly zobrazuje podobné zprávy jako v následujícím příkladu (což znamená, že aplikace běží a čeká na požadavky):
$ 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 adresu http://localhost:<port number>/api/math/sum?a=4&b=5. Měl by se zobrazit výsledek 9 .
Přejděte k rozhraní API produktu ( http://localhost:<port number>/api/math/product?a=4&b=5 ). Vrátí 9 , 20 ne, jak byste očekávali. Tento problém je vyřešen později v tomto kurzu.
Přidání dotnet watch do projektu
Nástroj dotnet watch pro sledování souborů je součástí verze 2.1.300 .NET Core SDK. Následující kroky jsou vyžadovány při použití starší verze .NET Core SDK.
Přidejte
Microsoft.DotNet.Watcher.Toolsodkaz na balíček do souboru .csproj:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Nainstalujte
Microsoft.DotNet.Watcher.Toolsbalíček spuštěním následujícího příkazu:dotnet restore
Spouštění .NET Core CLI příkazů pomocí dotnet watch
Jakýkoli .NET Core CLI lze spustit pomocí dotnet watch příkazu . Například:
| Příkaz | Příkaz s hodinkou |
|---|---|
| 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 WebApp. Výstup konzoly watch indikuje, že se zahájilo.
Při spuštění ve webové aplikaci se spustí prohlížeč, který přejde na adresu URL aplikace, jakmile bude dotnet watch run připravená. dotnet watch to dělá načtením výstupu konzoly aplikace a čekáním na připravenou zprávu zobrazenou v WebHost .
dotnet watch aktualizuje prohlížeč, když zjistí změny sledovaných souborů. K tomu příkaz watch vloží do aplikace middleware, který upravuje odpovědi HTML vytvořené aplikací. Middleware přidá na stránku blok skriptu JavaScriptu, který umožňuje nastavit dotnet watch aktualizaci prohlížeče. V současné době změny všech sledovaných souborů, včetně statického obsahu, jako jsou soubory.html a .css, způsobí opětovné sestavení aplikace.
dotnet watch:
- Ve výchozím nastavení sleduje pouze soubory, které mají vliv na sestavení.
- Výsledkem všech dalších sledovaných souborů (prostřednictvím konfigurace) je sestavení.
Další informace o konfiguraci najdete v části dotnet-watch configuration v tomto dokumentu.
Poznámka
Pomocí můžete dotnet watch --project <PROJECT> určit projekt, který chcete sledovat. Například spuštění z kořenového adresáře ukázkové aplikace se také spustí a dotnet watch --project WebApp run bude sledovat projekt webové aplikace.
Provedení změn pomocí dotnet watch
Ujistěte dotnet watch se, že je spuštěný.
Opravte chybu v Product metodě souboru MathController.cs tak, aby v ní vrátil produkt, a ne součet:
public static int Product(int a, int b)
{
return a * b;
}
Soubor uložte. Výstup konzoly znamená, dotnet watch že se zjistila změna souboru a aplikace se restartoval.
Ověřte, http://localhost:<port number>/api/math/product?a=4&b=5 že vrací správný výsledek.
Spouštění testů pomocí dotnet watch
Změňte
Productmetodu souboru MathController.cs zpět na vrácení součtu. Soubor uložte.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 indikuje, že test selhal a že se soubor čeká na provedení testu:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.Opravte
Productkód metody tak, aby vrátil produkt. Soubor uložte.
dotnet watch rozpozná změnu souboru a znovu testy. Výstup konzoly označuje, že testy byly úspěšně provedeny.
Přizpůsobení seznamu souborů ke sledování
Ve výchozím nastavení dotnet-watch sleduje všechny soubory, které odpovídají následujícím vzorům glob:
**/*.cs*.csproj**/*.resx- Soubory obsahu:
wwwroot/**,**/*.config,**/*.json
Další položky je možné přidat do seznamu ke zkoumkách úpravou souboru .csproj. Položky je možné zadat jednotlivě nebo pomocí vzorů glob.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Odhlášení ze sledování souborů
dotnet-watch lze nakonfigurovat tak, aby ignorovala výchozí nastavení. Pokud chcete ignorovat konkrétní soubory, přidejte atribut do Watch="false" definice položky v souboru .csproj:
<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>
Vlastní projekty hodinek
dotnet-watch není omezen na projekty C#. Vlastní projekty 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ý pro sledování obou projektů:
<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, změňte na testovací složku. Spusťte následující příkaz:
dotnet watch msbuild /t:Test
VSTest se spustí při změně jakéhokoli souboru v libovolném testovacím projektu.
konfigurace dotnet-watch
Některé možnosti konfigurace je možné předat prostřednictvím dotnet watch proměnných prostředí. Dostupné proměnné jsou:
| Nastavení | Popis |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Pokud je nastavená hodnota "1" nebo "true", použije nástroj pro sledování souborů dotazování místo funkce dotnet watch FileSystemWatcher CoreFx. Používá se při sledování souborů ve sdílených síťových svazcích nebo na svazcích, které jsou připojené k Dockeru. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Ve výchozím nastavení optimalizuje sestavení tím, že se vyhne určitým operacím, jako je spuštění obnovení nebo opětovné vyhodnocení sady sledovaných souborů dotnet watch 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 runse pokusí spustit prohlížeče pro webové aplikace s nakonfigurovanoulaunchSettings.jslaunchBrowser na . Pokud je nastavená hodnota "1" nebo "true", toto chování je potlačeno. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run se pokusí aktualizovat prohlížeče, když zjistí změny souborů. Pokud je nastavená hodnota "1" nebo "true", toto chování je potlačeno. Toto chování je také potlačeno, pokud DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER je nastaveno. |
Aktualizace prohlížeče
dotnet watch vloží do aplikace skript, který umožňuje aktualizovat prohlížeč při změně obsahu. V některých scénářích, například když aplikace povoluje kompresi odpovědí, nemusí být skript dotnet watch schopen vložit. Pro takové případy vývoje ručně zadat skript do aplikace. Pokud například chcete nakonfigurovat webovou aplikaci pro ruční vložení skriptu, 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>