ASP.NET Core-alkalmazások fejlesztése fájlfigyelő használatával

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.

  1. Microsoft.DotNet.Watcher.Tools Csomaghivatkozás hozzáadása a .csproj fájlhoz:

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
    </ItemGroup>
    
  2. Telepítse a Microsoft.DotNet.Watcher.Tools csomagot 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

  1. Módosítsa a Product metódusát a MathController.cs úgy, hogy ismét az összeget adja vissza. Mentse a fájlt.

  2. A parancshéjban keresse meg a WebAppTests mappát.

  3. Futtassa a dotnet-visszaállítást.

  4. Futtassa a dotnet watch test programot. 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.
    
  5. Javítsa ki a Product metó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.csproj
    • IntegrationTests/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=1 kö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.