Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Cet article s’applique à : ✔️ SDK .NET Core 3.1 et versions ultérieures
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.
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
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.
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>
}
<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écutable dotnet
, comme les commandes CLI intégrées et les outils globaux. Si vous pouvez exécuter dotnet <command>
, vous pouvez exécuter dotnet watch <command>
.
Dans le Kit de développement logiciel (SDK) .NET 8 et versions ultérieures, dotnet watch
peuvent exécuter dotnet run
, dotnet build
ou dotnet test
. Spécifiez run
, build
ou test
pour <command>
.
Si la commande enfant n’est pas spécifiée, la valeur par défaut est run
pour dotnet run
.
<forwarded arguments>
Les arguments fournis après un double tiret (--
) sont passés au processus dotnet
enfant. Si vous exécutez dotnet watch run
, ces arguments sont des options pour dotnet run. Si vous exécutez dotnet watch test
, ces arguments sont des options pour dotnet test.
--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 de dotnet restore
et dotnet 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 processus dotnet
enfant.
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
ou true
, 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 utilise DOTNET_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 sur 1
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 valeur 127.0.0.1
est remplacée par localhost
et les schémas http://
et https://
sont remplacés respectivement par ws://
et wss://
.
DOTNET_WATCH_ITERATION
dotnet watch
définit cette variable sur 1
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
ou true
, 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
ou true
.
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
Si la valeur est 1
ou true
, dotnet watch
ne lance pas ou n’actualise pas les navigateurs pour les applications web pour lesquelles launchBrowser
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 sur 1
ou true
, ces optimisations sont désactivées.
DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
Si la valeur est 1
ou true
, dotnet watch
n’effectue pas de gestion spéciale pour les fichiers de contenu statique. dotnet watch
définit la propriété MSBuild DotNetWatchContentFiles
sur false
.
DOTNET_WATCH_RESTART_ON_RUDE_EDIT
Lorsque la valeur est définie sur 1
ou true
, dotnet watch
redémarre toujours en cas de modifications non applicables au lieu de poser la question.
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
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.
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>
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>
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>
À 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.
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)?
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
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
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenant