dotnet watch run
Cet article s’applique à : ✔️ SDK .NET Core 3.1 et versions ultérieures
Nom
dotnet watch
- Redémarre ou recharge à chaud l’application spécifiée, ou bien exécute une commande dotnet spécifiée lorsque des modifications sont détectées dans le code source.
Synopsis
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Description
La commande dotnet watch
est un observateur de fichier. Quand une modification est détectée, elle exécute la commande dotnet run
ou une commande dotnet
spécifiée. Si elle exécute dotnet run
et que la modification est prise en charge pour un rechargement à chaud, elle recharge à chaud l’application spécifiée. Si la modification n’est pas prise en charge, elle redémarre l’application. Ce processus permet un développement itératif rapide à partir de la ligne de commande.
Lors de l’exécution de dotnet watch
, vous pouvez forcer l’application à se regénérer et à redémarrer en appuyant sur Ctrl+R dans l’interpréteur de commandes. Cette fonctionnalité est disponible uniquement pendant l’exécution de l’application. Par exemple, si vous exécutez dotnet watch
sur une application console qui se termine avant que vous appuyiez sur Ctrl+R, l’appui sur Ctrl+R ne produit aucun effet. En revanche, dans ce cas, dotnet watch
est encore en train d’observer les fichiers et redémarre l’application si un fichier est mis à jour.
Compression des réponses
Si dotnet watch
s’exécute pour une application qui utilise la compression des réponses, l’outil ne peut pas injecter le script d’actualisation du navigateur. .NET 7 et les versions ultérieures de l’outil affichent un message d’avertissement semblable au suivant :
Avertissement : Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
Impossible de configurer l’injection de script d’actualisation du navigateur sur la réponse. Ce problème peut être dû à la valeur Content-Encoding de la réponse : 'br'. Envisagez de désactiver la compression des réponses.
Au lieu de désactiver la compression des réponses, ajoutez manuellement la référence JavaScript de l’actualisation du navigateur aux pages de l’application :
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
Arguments
<command>
Dans le Kit de développement logiciel (SDK) .NET 7 et versions antérieures,
dotnet watch
vous pouvez exécuter n’importe quelle commande distribuée via l’exécutabledotnet
, comme les commandes CLI intégrées et les outils globaux. Si vous pouvez exécuterdotnet <command>
, vous pouvez exécuterdotnet watch <command>
.Dans le Kit de développement logiciel (SDK) .NET 8 et versions ultérieures,
dotnet watch
peuvent exécuterdotnet run
,dotnet build
oudotnet test
. Spécifiezrun
,build
outest
pour<command>
.Si la commande enfant n’est pas spécifiée, la valeur par défaut est
run
pourdotnet run
.<forwarded arguments>
Les arguments fournis après un double tiret (
--
) sont passés au processusdotnet
enfant. Si vous exécutezdotnet watch run
, ces arguments sont des options pour dotnet run. Si vous exécutezdotnet watch test
, ces arguments sont des options pour dotnet test.
Options
--list
Liste tous les fichiers découverts sans démarrer l’observateur.
--no-hot-reload
Supprimez le rechargement à chaud pour les applications prises en charge.
--non-interactive
Exécute
dotnet watch
en mode non interactif. Utilisez cette option pour empêcher toute demande d’entrée de console. Lorsque le rechargement à chaud est activé et qu’une modification non applicable est détectée, dotnet watch redémarre l’application. Disponible depuis le SDK .NET 7.--project <PATH>
Spécifie le chemin du fichier projet à exécuter (dossier uniquement ou nom du fichier projet compris). Si aucune valeur n’est spécifiée, le répertoire actif est utilisé par défaut.
-q|--quiet
Supprime toute la sortie générée par la commande
dotnet watch
, à l’exception des avertissements et des erreurs. L’option n’est pas passée aux commandes enfants. Par exemple, la sortie dedotnet restore
etdotnet run
continue d’être générée.-v|--verbose
Affiche la sortie en clair pour le débogage.
--version
Affiche la version de
dotnet watch
.--
L’option de double tiret ('--') peut être utilisée pour délimiter les options
dotnet watch
des arguments passés au processus enfant. Son utilisation est facultative. Lorsque l’option de double tiret n’est pas utilisée,dotnet watch
considère que le premier argument non reconnu correspond au début des arguments à passer au processusdotnet
enfant.
Variables d'environnement
dotnet watch
utilise les variables d’environnement suivantes :
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
Cette valeur est configurée par
dotnet watch
quand l’application est sur le point d’être lancée, et elle spécifie le canal nommé.DOTNET_USE_POLLING_FILE_WATCHER
Quand la valeur est
1
outrue
,dotnet watch
utilise un observateur de fichier d’interrogation au lieu de System.IO.FileSystemWatcher. L’interrogation est nécessaire pour certains systèmes de fichiers, tels que les partages réseau, les volumes montés par Docker et d’autres systèmes de fichiers virtuels. La classe PhysicalFileProvider utiliseDOTNET_USE_POLLING_FILE_WATCHER
pour déterminer si la méthode PhysicalFileProvider.Watch s’appuie sur PollingFileChangeToken.DOTNET_WATCH
dotnet watch
définit cette variable sur1
sur tous les processus enfants qu’elle lance.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
Dans le cadre de
dotnet watch
, le mécanisme du serveur d’actualisation du navigateur lit cette valeur pour déterminer l’environnement hôte WebSocket. La valeur127.0.0.1
est remplacée parlocalhost
et les schémashttp://
ethttps://
sont remplacés respectivement parws://
etwss://
.DOTNET_WATCH_ITERATION
dotnet watch
définit cette variable sur1
et l’incrémente de 1 chaque fois qu’un fichier est modifié et que la commande redémarre ou recharge à chaud l’application.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
Si la valeur est
1
outrue
,dotnet watch
n’actualise pas les navigateurs lorsqu’elle détecte des modifications de fichier.DOTNET_WATCH_SUPPRESS_EMOJIS
Avec le SDK .NET 6.0.300 et versions ultérieures,
dotnet watch
émet des caractères non-ASCII dans la console, comme illustré dans l’exemple suivant :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...
Sur certains hôtes de console, ces caractères peuvent sembler confus. Pour éviter de voir des caractères confus, définissez cette variable sur
1
outrue
.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Si la valeur est
1
outrue
,dotnet watch
ne lance pas ou n’actualise pas les navigateurs pour les applications web pour lesquelleslaunchBrowser
est configuré dans launchSettings.json.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
Par défaut,
dotnet watch
optimise la génération en évitant certaines opérations, comme l’exécution d’une restauration ou la réévaluation de l’ensemble des fichiers observés à chaque modification de fichier. Si cette variable est définie sur1
outrue
, ces optimisations sont désactivées.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Si la valeur est
1
outrue
,dotnet watch
n’effectue pas de gestion spéciale pour les fichiers de contenu statique.dotnet watch
définit la propriété MSBuildDotNetWatchContentFiles
surfalse
.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Lorsque la valeur est définie sur
1
outrue
,dotnet watch
redémarre toujours en cas de modifications non applicables au lieu de poser la question.
Fichiers observés par défaut
dotnet watch
observe tous les éléments du groupe d’éléments Watch
dans le fichier projet. Par défaut, ce groupe inclut tous les éléments des groupes Compile
et EmbeddedResource
. dotnet watch
analyse également la totalité du graphe des références de projet et observe tous les fichiers au sein de ces projets.
Par défaut, les groupes Compile
et EmbeddedResource
incluent tous les fichiers correspondant aux modèles Glob suivants :
**/*.cs
*.csproj
**/*.resx
- Fichiers de contenu dans les applications web :
wwwroot/**
Par défaut, les fichiers .config et .json ne déclenchent pas de redémarrage dotnet watch, car le système de configuration dispose de ses propres mécanismes pour gérer les modifications de configuration.
Les fichiers peuvent être ajoutés à la liste d’observation ou supprimés de la liste en modifiant le fichier projet. Vous pouvez spécifier des fichiers individuellement ou en utilisant des modèles Glob.
Observer des fichiers supplémentaires
Vous pouvez observer d’autres fichiers en ajoutant des éléments au groupe Watch
. Par exemple, le balisage suivant étend ce groupe pour inclure des fichiers JavaScript :
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Ignorer les fichiers spécifiés
dotnet watch
ignore les éléments Compile
et EmbeddedResource
qui ont l’attribut Watch="false"
, comme indiqué dans l’exemple suivant :
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
dotnet watch
ignore les références de projet qui ont l’attribut Watch="false"
, comme indiqué dans l’exemple suivant :
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
Configuration avancée
dotnet watch
effectue une génération au moment du design pour rechercher les éléments à observer. Lorsque cette génération est exécutée, dotnet watch
définit la propriété DotNetWatchBuild=true
. Cette propriété peut être utilisée comme indiqué dans l’exemple suivant :
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
Rechargement à chaud
À compter de .NET 6, dotnet watch
inclut la prise en charge du rechargement à chaud. Le rechargement à chaud est une fonctionnalité qui vous permet d’appliquer des modifications à une application en cours d’exécution sans avoir à la regénérer et à la redémarrer. Les modifications peuvent concerner des fichiers de code ou des ressources statiques, telles que des fichiers de feuille de style et des fichiers JavaScript. Cette fonctionnalité simplifie l’expérience de développement local, car elle fournit des commentaires immédiats lorsque vous modifiez votre application.
Pour plus d’informations sur les types d’applications et les versions .NET qui prennent en charge le rechargement à chaud, consultez Frameworks et scénarios d’application .NET pris en charge.
Modifications non applicables
Lorsqu’un fichier est modifié, dotnet watch
détermine si l’application peut être rechargée à chaud. Si elle ne peut pas être rechargée à chaud, la modification est appelée modification non applicable et dotnet watch
vous demande si vous voulez redémarrer l’application :
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)?
- Oui : redémarre l’application.
- Non : laisse l’application en cours d’exécution sans appliquer les modifications.
- Toujours : redémarre l’application et n’invite plus à la redémarrer en cas de modification non applicable.
- Jamais : laisse l’application en cours d’exécution sans appliquer les modifications et n’invite plus à la redémarrer en cas de modification non applicable.
Pour plus d’informations sur les types de modifications considérés comme des modifications non applicables, consultez Modifier le code et continuer le débogage et Modifications du code non prises en charge.
Pour désactiver le rechargement à chaud lorsque vous exécutez dotnet watch
, utilisez l’option --no-hot-reload
, comme indiqué dans l’exemple suivant :
dotnet watch --no-hot-reload
Exemples
Exécutez
dotnet run
pour le projet dans le répertoire actif chaque fois que le code source change :dotnet watch
Ou :
dotnet watch run
Exécutez
dotnet test
pour le projet dans le répertoire actif chaque fois que le code source change :dotnet watch test
Exécutez
dotnet run --project ./HelloWorld.csproj
chaque fois que le code source change :dotnet watch run --project ./HelloWorld.csproj
Exécutez
dotnet run -- arg0
pour le projet dans le répertoire actif chaque fois que le code source change :dotnet watch run -- arg0
Ou :
dotnet watch -- run arg0
Voir aussi
- Tutoriel : Développer des applications ASP.NET Core à l’aide d’un observateur de fichier
- Rechargement à chaud dans Visual Studio
- Applications prises en charge par le rechargement à chaud
- Modifications de code prises en charge par le rechargement à chaud
- Exécution de tests de rechargement à chaud
- Prise en charge du rechargement à chaud pour ASP.NET Core