Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av Rick Anderson och Victor Hurdugaci
dotnet watch
är ett verktyg som kör ett .NET CLI-kommando när källfilerna ändras. En filändring kan till exempel utlösa kompilering, testkörning eller distribution.
I den här självstudien används ett befintligt webb-API med två slutpunkter: en som returnerar en summa och en som returnerar en produkt. Produktmetoden har en bugg som fixas i den här handledningen.
Ladda ned exempelappen. Den består av två projekt: WebApp (ett ASP.NET Core-webb-API) och WebAppTests (enhetstester för webb-API:et).
I ett kommandogränssnitt navigerar du till mappen WebApp . Kör följande kommando:
dotnet run
Anmärkning
Du kan använda dotnet run --project <PROJECT>
för att ange ett projekt som ska köras. Om du till exempel kör dotnet run --project WebApp
från roten i exempelappen körs även WebApp-projektet .
Konsolens utdata visar meddelanden som liknar följande (som anger att appen körs och väntar på begäranden):
$ 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.
I en webbläsare navigerar du till http://localhost:<port number>/api/math/sum?a=4&b=5
. Du bör se resultatet av 9
.
Gå till produkt-API:et (http://localhost:<port number>/api/math/product?a=4&b=5
). Den returnerar 9
, inte 20
som förväntat. Det problemet åtgärdas senare i handledningen.
Lägg till dotnet watch
i ett projekt
Filbevakarverktyget dotnet watch
ingår i version 2.1.300 av .NET Core SDK. Följande steg krävs när du använder en tidigare version av .NET Core SDK.
Lägg till en
Microsoft.DotNet.Watcher.Tools
paketreferens till.csproj
filen:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
Installera
Microsoft.DotNet.Watcher.Tools
-paketet genom att köra följande kommando:dotnet restore
Kör .NET CLI-kommandon med hjälp av dotnet watch
Alla .NET CLI-kommandon kan köras med dotnet watch
. Till exempel:
Befallning | Kommando med klocka |
---|---|
dotnet-körning | 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 |
Kör dotnet watch run
i mappen WebApp . Konsolens utdata anger att watch
har startats.
Att köra dotnet watch run
på en webbapp startar en webbläsare som navigerar till appens URL när den är redo.
dotnet watch
gör detta genom att läsa appens konsolutdata och vänta på det färdiga meddelandet som visas av WebHost.
dotnet watch
uppdaterar webbläsaren när den identifierar ändringar i övervakade filer. För att göra detta matar klockkommandot in ett mellanprogram till appen som ändrar HTML-svar som skapats av appen. Mellanprogrammet lägger till ett JavaScript-skriptblock på sidan som gör det möjligt dotnet watch
att instruera webbläsaren att uppdatera. För närvarande leder ändringar i alla övervakade filer, inklusive statiskt innehåll som .html
och .css
filer, till att appen kompileras om.
dotnet watch
:
- Bevakar endast filer som påverkar byggen som standard.
- Ytterligare övervakade filer (via konfiguration) resulterar fortfarande i att en build sker.
Mer information om konfiguration finns i dotnet-watch-konfigurationen i det här dokumentet.
Anmärkning
Du kan använda dotnet watch --project <PROJECT>
för att ange ett projekt att titta på. Om du till exempel kör dotnet watch --project WebApp run
från roten av exempelappen kommer du också att köra och övervaka WebApp-projektet.
Gör ändringar med dotnet watch
Kontrollera att dotnet watch
körs.
Åtgärda felet i Product
metoden MathController.cs
för så att den returnerar produkten och inte summan:
public static int Product(int a, int b)
{
return a * b;
}
Spara filen. Konsolens utdata anger att dotnet watch
en filändring upptäcktes och appen startades om.
Verifiera http://localhost:<port number>/api/math/product?a=4&b=5
returnerar rätt resultat.
Köra tester med hjälp av dotnet watch
Ändra metoden för
Product
tillbaka till att returnera summan medMathController.cs
. Spara filen.I ett kommandogränssnitt navigerar du till mappen WebAppTests .
Kör dotnet restore.
Kör
dotnet watch test
. Dess utdata anger att ett test misslyckades och att bevakaren väntar på filändringar:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.
Product
Åtgärda metodkoden så att den returnerar produkten. Spara filen.
dotnet watch
identifierar filändringen och kör testerna igen. Konsolens utdata anger vilka tester som har godkänts.
Anpassa fillistan för övervakning
Som standard dotnet-watch
spårar alla filer som matchar följande globmönster:
**/*.cs
*.csproj
**/*.resx
- Innehållsfiler:
wwwroot/**
,**/*.config
, ,**/*.json
Fler objekt kan läggas till i bevakningslistan genom att redigera .csproj
filen. Objekt kan anges individuellt eller med hjälp av globmönster.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Avregistrera filer som ska övervakas
dotnet-watch
kan konfigureras för att ignorera standardinställningarna. Om du vill ignorera specifika filer lägger du till Watch="false"
attributet i ett objekts definition i .csproj
filen:
<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>
Specialdesignade klockprojekt
dotnet-watch
är inte begränsat till C#-projekt. Anpassade klockprojekt kan skapas för att hantera olika scenarier. Överväg följande projektlayout:
-
test/
UnitTests/UnitTests.csproj
IntegrationTests/IntegrationTests.csproj
Om målet är att titta på båda projekten skapar du en anpassad projektfil som konfigurerats för att titta på båda projekten:
<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>
Om du vill starta filvisning i båda projekten ändrar du till testmappen . Kör följande kommando:
dotnet watch msbuild /t:Test
VSTest körs när någon fil ändras i något av testprojekten.
dotnet-watch-konfiguration
Vissa konfigurationsalternativ kan skickas till dotnet watch
via miljövariabler. Tillgängliga variabler är:
Inställning | Beskrivning |
---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Om värdet är "1" eller "true" dotnet watch använder en avsökningsfilbevakare i stället för CoreFx.FileSystemWatcher Används när du tittar på filer på nätverksdelningar eller Docker-monterade volymer. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Som standard dotnet watch optimerar bygget genom att undvika vissa specifika åtgärder, exempelvis att köra återställning eller återutvärdera uppsättningen övervakade filer vid varje filändring. Om värdet är "1" eller "true" inaktiveras dessa optimeringar. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run försöker starta webbläsare för webbappar med launchBrowser konfigurerat i launchSettings.json . Om värdet är "1" eller "true" ignoreras det här beteendet. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run försöker uppdatera webbläsare när den identifierar filändringar. Om värdet är "1" eller "true" ignoreras det här beteendet. Det här beteendet undertrycks också om DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER är inställt. |
Webbläsaruppdatering
dotnet watch
matar in ett skript i appen som gör att den kan uppdatera webbläsaren när innehållet ändras. I vissa scenarier, till exempel när appen aktiverar svarskomprimering, dotnet watch
kanske inte kan mata in skriptet. I sådana fall under utveckling matar du in skriptet manuellt i appen. Om du till exempel vill konfigurera webbappen så att skriptet matas in manuellt uppdaterar du layoutfilen så att den inkluderar _framework/aspnet-browser-refresh.js
:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Icke-ASCII-tecken
Visual Studio 17.2 eller senare innehåller .NET SDK 6.0.300 eller senare. Med .NET SDK version 6.0.300 eller senare skriver dotnet-watch
ut icke-ASCII-tecken till konsolen under en hot reload-session. På vissa konsolvärdar, till exempel Windows conhost, kan dessa tecken verka förvrängda. Tänk på något av följande för att undvika förvrängda tecken:
-
DOTNET_WATCH_SUPPRESS_EMOJIS=1
Konfigurera miljövariabeln så att den inte genererar dessa värden. - Växla till en annan terminal, till exempel , som https://github.com/microsoft/terminalstöder återgivning av icke-ASCII-tecken.
ASP.NET Core