Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rick Anderson és Victor Hurdugaci
dotnet watch egy . NET CLI-parancsot futtató eszköz, amikor a forrásfájlok megváltoznak. A fájlmódosítások például fordítást, tesztelést vagy üzembe helyezést válthatnak ki.
Ez az oktatóanyag egy meglévő webes API-t használ két végponttal: egyet, amely egy összeget ad vissza, egyet pedig egy terméket. A termékmetódushoz tartozik egy hiba, amelyet ebben az oktatóanyagban javítottunk.
Töltse le a mintaalkalmazást. Két projektből áll: a WebAppból (egy ASP.NET Core webes API-ból) és a WebAppTestsből (a webes API egységtesztjeiből).
A parancshéjban keresse meg a WebApp mappát. Futtassa a következő parancsot:
dotnet run
Note
Megadhat dotnet run --project <PROJECT> egy futtatandó projektet. A mintaalkalmazás gyökeréből futtatva dotnet run --project WebApp például a WebApp-projektet is futtatja.
A konzol kimenete az alábbihoz hasonló üzeneteket jelenít meg (ami azt jelzi, hogy az alkalmazás fut és várja a kéréseket):
$ 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.
Egy webböngészőben keresse meg a következőt http://localhost:<port number>/api/math/sum?a=4&b=5. Látnia kellene 9 eredményét.
Nyissa meg a termék API-t (http://localhost:<port number>/api/math/product?a=4&b=5). A 9 tér vissza, nem pedig 20, ahogy várnád. Ezt a problémát az oktatóanyag későbbi részében kijavítottuk.
Adjon hozzá dotnet watch a projekthez
A dotnet watch fájlfigyelő eszköz a .NET SDK 2.1.300-es verziójában található. A .NET SDK egy korábbi verziójának használatakor a következő lépések szükségesek.
Microsoft.DotNet.Watcher.ToolsCsomaghivatkozás hozzáadása a.csprojfájlhoz:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Telepítse a
Microsoft.DotNet.Watcher.Toolscsomagot a következő parancs futtatásával:dotnet restore
.NET CLI-parancsok futtatása dotnet watch
Bármely .NET CLI-parancs futtatható a következővel dotnet watch: . For example:
| Command | Parancs óra használatával |
|---|---|
| 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 órateszt |
A dotnet watch run mappában futtassa . A konzol kimenete azt jelzi, hogy watch elindult.
A webalkalmazáson való futtatás dotnet watch run elindít egy böngészőt, amely az alkalmazás URL-címére lép, amint elkészült.
dotnet watch ezt úgy teszi meg, hogy beolvassa az alkalmazás konzoljának kimenetét, és megvárja a kész üzenetet, amely a következő szerint WebHostjelenik meg: .
dotnet watch frissíti a böngészőt, amikor észleli a figyelt fájlok módosításait. Ehhez a watch parancs egy köztes szoftvert injektál az alkalmazásba, amely módosítja az alkalmazás által létrehozott HTML-válaszokat. A köztes szoftver hozzáad egy JavaScript szkriptblokkot a laphoz, amely lehetővé teszi dotnet watch-nak a böngésző frissítését. Jelenleg az összes figyelt fájl, beleértve a statikus tartalmakat, például a .html és .css fájlokat, módosítása az alkalmazás újraépítését okozza.
dotnet watch:
- Alapértelmezés szerint csak azokat a fájlokat figyeli, amelyek hatással vannak a buildekre.
- A további figyelt fájlok (konfigurációval) továbbra is buildelést eredményeznek.
A konfigurációval kapcsolatos további információkért lásd a dotnet-watch konfigurációját ebben a dokumentumban.
Note
Megadhatja dotnet watch --project <PROJECT> a megtekinteni kívánt projektet. A mintaalkalmazás gyökeréből futtatva dotnet watch --project WebApp run például futtathatja és figyelheti a WebApp projektet is.
Hajtsd végre a módosításokat a dotnet watch
Győződjön meg arról, hogy dotnet watch fut.
Javítsa ki a hibát a Product metódusban MathController.cs , hogy az a terméket adja vissza, és ne az összeget:
public static int Product(int a, int b)
{
return a * b;
}
Mentse a fájlt. A konzol kimenete azt jelzi, hogy dotnet watch a rendszer fájlmódosítást észlelt, és újraindította az alkalmazást.
Ellenőrizze, hogy a helyes eredményt adja-e http://localhost:<port number>/api/math/product?a=4&b=5 vissza.
Tesztek futtatása a következő használatával: dotnet watch
Módosítsa a
Productmetódusát aMathController.csúgy, hogy ismét az összeget adja vissza. Mentse a fájlt.A parancshéjban keresse meg a WebAppTests mappát.
Futtassa a dotnet-visszaállítást.
Futtassa a
dotnet watch testprogramot. A kimenet azt jelzi, hogy egy teszt sikertelen volt, és a figyelő fájlmódosításokra vár:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.Javítsa ki a
Productmetódust, hogy eredményt adjon vissza. Mentse a fájlt.
dotnet watch észleli a fájlmódosítást, és újrafuttatja a teszteket. A konzol kimenete az elvégzett teszteket jelzi.
Fájlok listájának testreszabása figyeléshez
Alapértelmezés szerint dotnet-watch az alábbi globmintáknak megfelelő összes fájlt nyomon követi:
**/*.cs*.csproj**/*.resx- Tartalomfájlok:
wwwroot/**, ,**/*.config**/*.json
A fájl szerkesztésével további elemek is hozzáadhatók a .csproj figyelőlistához. Az elemek egyedileg vagy glob mintákkal is megadhatóak.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
A figyelni kívánt fájlok letiltása
dotnet-watch konfigurálható úgy, hogy figyelmen kívül hagyja az alapértelmezett beállításokat. Adott fájlok figyelmen kívül hagyásához adja hozzá az Watch="false" attribútumot egy elem definícióhoz a .csproj fájlban:
<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>
Egyéni óraprojektek
dotnet-watch nem korlátozódik C#-projektekre. A különböző forgatókönyvek kezelésére egyéni óraprojektek hozhatók létre. Vegye figyelembe a következő projektelrendezést:
-
test/
UnitTests/UnitTests.csprojIntegrationTests/IntegrationTests.csproj
Ha a cél mindkét projekt megtekintése, hozzon létre egy egyéni projektfájlt, amely mindkét projekt megtekintésére van konfigurálva:
<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>
Ha mindkét projekten fájlfigyelésbe szeretne kezdeni, váltson a tesztmappára . Hajtsa végre a következő parancsot:
dotnet watch msbuild /t:Test
A VSTest akkor hajtja végre, amikor bármelyik tesztprojekt fájlja megváltozik.
dotnet-watch configuration
Bizonyos konfigurációs beállítások környezeti változókon keresztül is átadhatók dotnet watch . Az elérhető változók a következők:
| Setting | Description |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Ha "1" vagy "true" értékre van állítva, dotnet watch a CoreFx FileSystemWatcherfüggvény helyett egy lekérdezésfájl-figyelőt használ. A hálózati megosztásokon vagy a Dockerhez csatlakoztatott köteteken lévő fájlok figyelésekor használatos. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Alapértelmezés szerint a dotnet watch optimalizálja a buildet azáltal, hogy elkerül bizonyos műveleteket, mint például a visszaállítás futtatása vagy a figyelt fájlok készletének ismételt kiértékelése minden fájlmódosításkor. Ha "1" vagy "true" értékre van állítva, ezek az optimalizálások le lesznek tiltva. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run megkísérli elindítani a böngészőket a webalkalmazások számára, amelyeket launchBrowser-gal launchSettings.json-ben konfiguráltak. Ha "1" vagy "true" értékre van állítva, a rendszer letiltja ezt a viselkedést. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run megkísérli frissíteni a böngészőket, amikor fájlmódosításokat észlel. Ha "1" vagy "true" értékre van állítva, a rendszer letiltja ezt a viselkedést. Ez a viselkedés akkor is el lesz tiltva, ha DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER be van állítva. |
Browser refresh
dotnet watch egy szkriptet injektál az alkalmazásba, amely lehetővé teszi a böngésző frissítését, amikor a tartalom megváltozik. Bizonyos esetekben, például amikor az alkalmazás engedélyezi a választömörítést, előfordulhat, dotnet watch hogy nem tudja beadni a szkriptet. Ilyen esetekben a fejlesztés során manuálisan injektálja a szkriptet az alkalmazásba. Ha például úgy szeretné konfigurálni a webalkalmazást, hogy manuálisan injektálja a szkriptet, frissítse az elrendezésfájlt a következőre _framework/aspnet-browser-refresh.js:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Non-ASCII characters
A Visual Studio 17.2 vagy újabb verziója tartalmazza a .NET SDK 6.0.300 vagy újabb verzióját. A .NET SDK 6.0.300 és újabb verzióival a dotnet-watch nem-ASCII karaktereket bocsát ki a konzolra egy forró újratöltési munkamenet során. Bizonyos konzolgazdákon, például a Windows Conhost esetében, ezek a karakterek torzulhatnak. A felesleges karakterek elkerülése érdekében fontolja meg az alábbi módszerek egyikét:
- Konfigurálja úgy a
DOTNET_WATCH_SUPPRESS_EMOJIS=1környezeti változót, hogy ne kelljen ezeket az értékeket kibocsátani. - Váltson másik terminálra, például https://github.com/microsoft/terminalolyan terminálra, amely támogatja a nem ASCII-karakterek megjelenítését.