dotnet óra
Ez a cikk a következőre vonatkozik: ✔️ .NET Core 3.1 SDK és újabb verziók
Név
dotnet watch
– Újraindítja vagy újra betölti a megadott alkalmazást, vagy futtat egy megadott dotnet-parancsot a forráskód változásainak észlelésekor.
Szinopszis
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Leírás
A dotnet watch
parancs egy fájlfigyelő. Amikor változást észlel, futtatja a dotnet run
parancsot vagy egy megadott dotnet
parancsot. Ha futdotnet run
, és a módosítás támogatott a gyakori elérésű újratöltéshez, a rendszer újra betölti a megadott alkalmazást. Ha a módosítás nem támogatott, újraindítja az alkalmazást. Ez a folyamat gyors iteratív fejlesztést tesz lehetővé a parancssorból.
Futtatás dotnet watch
közben kényszerítheti az alkalmazást az újraépítésre és az újraindításra a Ctrl+R billentyűkombináció lenyomásával a parancshéjban. Ez a funkció csak akkor érhető el, ha az alkalmazás fut. Ha például egy olyan konzolalkalmazáson fut dotnet watch
, amely a Ctrl+R billentyűkombináció lenyomása előtt ér véget, a Ctrl+R billentyűkombinációnak nincs hatása. Ebben az esetben dotnet watch
azonban továbbra is figyeli a fájlokat, és egy fájl frissítésekor újraindítja az alkalmazást.
Választömörítés
Ha dotnet watch
választömörítést használó alkalmazáshoz fut, az eszköz nem tudja beadni a böngészőfrissítési szkriptet. Az eszköz .NET 7-es és újabb verziója az alábbihoz hasonló figyelmeztető üzenetet jelenít meg:
warn: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Nem lehet konfigurálni a böngésző frissítési szkriptjének injektálását a válaszon. Ezt okozhatta a válasz content-kódolása: "br". Fontolja meg a választömörítés letiltását.
A választömörítés letiltása helyett manuálisan adja hozzá a böngésző frissítési JavaScript-hivatkozását az alkalmazás lapjaihoz:
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Argumentumok
<command>
A .NET 7 SDK-ban és a korábbi verziókban bármilyen,
dotnet watch
adotnet
végrehajtható parancson keresztül küldött parancs futtatható, például beépített PARANCSSOR-parancsokkal és globális eszközökkel. Ha futtathatódotnet <command>
, futtathatja a parancsotdotnet watch <command>
.A .NET 8 SDK-ban és újabb verziókban
dotnet watch
futtathatók ,dotnet build
vagydotnet test
.dotnet run
Adja megrun
,build
vagytest
a következőhöz<command>
: .Ha a gyermekparancs nincs megadva, az alapértelmezett érték a
run
következődotnet run
: .<forwarded arguments>
A kettős kötőjel (
--
) után megadott argumentumokat a rendszer átadja a gyermekfolyamatnakdotnet
. Ha futdotnet watch run
, ezek az argumentumok a dotnet futtatásának lehetőségei. Ha futdotnet watch test
, ezek az argumentumok a dotnet-teszt beállításai.
Beállítások
--list
Az összes felderített fájl listázása a figyelő indítása nélkül.
--no-hot-reload
A támogatott alkalmazások gyakori újratöltésének letiltása.
--non-interactive
Nem interaktív módban fut
dotnet watch
. Ezzel a beállítással megakadályozhatja a konzol bemenetének kérését. Ha engedélyezve van a gyakori újratöltés, és durva szerkesztést észlel, a dotnet watch újraindítja az alkalmazást. A .NET 7 SDK óta érhető el.--project <PATH>
Megadja a futtatandó projektfájl elérési útját (csak mappa vagy a projektfájl nevét is beleértve). Ha nincs megadva, alapértelmezés szerint az aktuális könyvtár lesz.
-q|--quiet
A parancs által generált összes kimenetet letiltja a
dotnet watch
figyelmeztetések és hibák kivételével. A beállítás nem lesz átadva a gyermekparancsok számára. Például a kimenet a kimenetből származikdotnet restore
, ésdotnet run
továbbra is kimenet marad.-v|--verbose
Részletes kimenetet jelenít meg a hibakereséshez.
--version
A következő verziójának
dotnet watch
megjelenítése: .--
A kétkötőjeles beállítás ('--') segítségével elválaszthatja
dotnet watch
a beállításokat a gyermekfolyamatnak átadott argumentumoktól. Használata nem kötelező. Ha nem használja a kétkötőjeles beállítást, az első felismeretlen argumentumot az argumentumok elejének tekinti,dotnet watch
amelyeket át kell adnia a gyermekfolyamatbadotnet
.
Környezeti változók
dotnet watch
A következő környezeti változókat használja:
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Ezt az értéket az alkalmazás elindításakor konfigurálja
dotnet watch
, és megadja a megnevezett csövet.DOTNET_USE_POLLING_FILE_WATCHER
Ha be van állítva,
1
vagytrue
egydotnet watch
lekérdezésfájl-figyelőt használ ahelyett, hogy a lekérdezést használnák System.IO.FileSystemWatcher. Egyes fájlrendszerek, például hálózati megosztások, Docker-csatlakoztatott kötetek és más virtuális fájlrendszerek lekérdezése szükséges. Az PhysicalFileProvider osztály annak meghatározására használjaDOTNET_USE_POLLING_FILE_WATCHER
, hogy a PhysicalFileProvider.Watch metódus a PollingFileChangeToken.DOTNET_WATCH
dotnet watch
beállítja ezt a változót1
az összes elindított gyermekfolyamatra.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Ennek részeként a böngészőfrissítési
dotnet watch
kiszolgáló mechanizmusa beolvassa ezt az értéket a WebSocket gazdagépkörnyezetének meghatározásához. Az érték127.0.0.1
helyébe az , és ahttps://
http://
sémák lépnek, illetvewss://
azok helyébews://
.localhost
DOTNET_WATCH_ITERATION
dotnet watch
ezt a változót1
minden fájl módosításakor egy-egy lépésre állítja, és a parancs újraindul vagy újra betölti az alkalmazást.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
Ha be van állítva vagy
1
true
,dotnet watch
nem frissíti a böngészőket, amikor fájlmódosításokat észlel.DOTNET_WATCH_SUPPRESS_EMOJIS
A .NET SDK 6.0.300-as és újabb
dotnet watch
verzióival nem ASCII-karaktereket bocsát ki a konzolra, ahogyan az az alábbi példában látható:dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. 💡 Press "Ctrl + R" to restart. dotnet watch 🔧 Building... dotnet watch 🚀 Started dotnet watch ⌚ Exited dotnet watch ⏳ Waiting for a file to change before restarting dotnet...
Egyes konzol gazdagépeken ezek a karakterek eltéphetetlennek tűnhetnek. Ha el szeretné kerülni a felesleges karaktereket, állítsa ezt a változót a következőre
1
: vagytrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Ha be van
1
állítva vagytrue
,dotnet watch
nem indít el vagy frissít böngészőket alaunchBrowser
launchSettings.json konfigurált webalkalmazásokhoz.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Alapértelmezés szerint
dotnet watch
optimalizálja a buildet bizonyos műveletek elkerülésével, például a visszaállítás futtatásával vagy a figyelt fájlok ismételt kiértékelésével minden fájlmódosításkor. Ha a változó értéke vagytrue
értéke1
, ezek az optimalizálások le vannak tiltva.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Ha be van
1
állítva vagytrue
,dotnet watch
nem fog speciálisan kezelni a statikus tartalomfájlokat.dotnet watch
az MSBuild tulajdonságotDotNetWatchContentFiles
a értékre állítjafalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Ha be van állítva vagy
1
true
,dotnet watch
mindig újraindul a durva szerkesztésekkel ahelyett, hogy megkérdezné.
Alapértelmezés szerint figyelt fájlok
dotnet watch
A projektfájl elemcsoportjának összes elemét Watch
figyeli. Ez a csoport alapértelmezés szerint a csoport összes elemét Compile
EmbeddedResource
tartalmazza. dotnet watch
A projekthivatkozások teljes gráfját is megvizsgálja, és a projekteken belüli összes fájlt figyeli.
Alapértelmezés szerint az és EmbeddedResource
a Compile
csoportok az alábbi gömbmintáknak megfelelő összes fájlt tartalmazzák:
**/*.cs
*.csproj
**/*.resx
- Tartalomfájlok webalkalmazásokban:
wwwroot/**
Alapértelmezés szerint a .config és .json fájlok nem aktiválják a dotnet watch újraindítását, mert a konfigurációs rendszer saját mechanizmusokkal rendelkezik a konfigurációs módosítások kezeléséhez.
A fájlok hozzáadhatók a figyelőlistához, vagy eltávolíthatók a listából a projektfájl szerkesztésével. A fájlok egyedileg vagy glob mintákkal adhatók meg.
További fájlok megtekintése
További fájlok tekinthetők meg, ha elemeket ad hozzá a Watch
csoporthoz. A következő korrektúra például kiterjeszti a csoportot a JavaScript-fájlokra:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Megadott fájlok figyelmen kívül hagyása
dotnet watch
a következő példában látható módon figyelmen kívül hagyja Compile
az EmbeddedResource
attribútummal rendelkező Watch="false"
elemeket:
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch
figyelmen kívül hagyja az Watch="false"
attribútummal rendelkező projekthivatkozásokat az alábbi példában látható módon:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Speciális konfiguráció
dotnet watch
tervezési idejű buildet hajt végre, hogy megkeresse a megtekinteni kívánt elemeket. A build futtatásakor dotnet watch
beállítja a tulajdonságot DotNetWatchBuild=true
. Ez a tulajdonság az alábbi példában látható módon használható:
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Gyakori elérésű újratöltés
A .NET 6-tól dotnet watch
kezdve támogatja a gyakori elérésű újratöltést. A gyakori elérésű újratöltés funkció lehetővé teszi a módosítások alkalmazását egy futó alkalmazáson anélkül, hogy újra kellene építenie és újra kellene indítania. A módosítások lehetnek kódfájlok vagy statikus objektumok, például stíluslapfájlok és JavaScript-fájlok. Ez a funkció leegyszerűsíti a helyi fejlesztési élményt, mivel azonnali visszajelzést ad az alkalmazás módosításakor.
A gyakori elérésű újratöltést támogató alkalmazástípusokról és .NET-verziókról a támogatott .NET-alkalmazás-keretrendszerek és -forgatókönyvek című témakörben olvashat.
Durva módosítások
Ha módosít egy fájlt, meghatározza, dotnet watch
hogy az alkalmazás betölthető-e újra. Ha nem tölthető be újra a gyakori elérésű fájl, a módosítást durva szerkesztésnek nevezzük, és dotnet watch
megkérdezi, hogy újra szeretné-e indítani az alkalmazást:
dotnet watch ⌚ Unable to apply hot reload because of a rude edit.
❔ Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?
- Igen: Újraindítja az alkalmazást.
- Nem: A módosítások alkalmazása nélkül hagyja futni az alkalmazást.
- Mindig: Újraindítja az alkalmazást, és többé nem kér durva módosításokat.
- Soha: A módosítások alkalmazása nélkül hagyja futni az alkalmazást, és többé nem kér durva módosításokat.
További információ arról, hogy milyen típusú módosítások minősülnek durva szerkesztésnek, olvassa el a Kód szerkesztése című témakört , és folytassa a hibakeresést és a kód nem támogatott módosításait.
Ha le szeretné tiltani a gyakori elérésű újratöltést futtatáskor dotnet watch
, használja a --no-hot-reload
következő példában látható beállítást:
dotnet watch --no-hot-reload
Példák
Futtassa
dotnet run
a projektet az aktuális könyvtárban, amikor a forráskód megváltozik:dotnet watch
Vagy:
dotnet watch run
Futtassa
dotnet test
a projektet az aktuális könyvtárban, amikor a forráskód megváltozik:dotnet watch test
Futtassa
dotnet run --project ./HelloWorld.csproj
a forráskód minden módosításakor:dotnet watch run --project ./HelloWorld.csproj
Futtassa
dotnet run -- arg0
a projektet az aktuális könyvtárban, amikor a forráskód megváltozik:dotnet watch run -- arg0
Vagy:
dotnet watch -- run arg0
Lásd még
- Oktatóanyag: ASP.NET Core-alkalmazások fejlesztése fájlfigyelő használatával
- Gyakori elérésű újratöltés a Visual Studióban
- Támogatott alkalmazások gyakori újratöltése
- Támogatott kódmódosítások gyakori újratöltése
- Gyakori elérésű újratöltési teszt végrehajtása
- Gyakori újratöltés támogatása ASP.NET Core-hoz