Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Par Rick Anderson et Victor Hurdugaci
dotnet watch est un outil qui exécute une commande CLI .NET lorsque les fichiers sources changent. Par exemple, une modification de fichier peut déclencher la compilation, l’exécution de test ou le déploiement.
Ce tutoriel utilise une API web existante avec deux points de terminaison : un qui retourne une somme et un autre qui retourne un produit. La méthode de produit a un bogue, qui est résolu dans ce tutoriel.
Téléchargez l’exemple d’application. Il se compose de deux projets : WebApp (une API web ASP.NET Core) et WebAppTests (tests unitaires pour l’API web).
Dans un interpréteur de commandes, accédez au dossier WebApp . Exécutez la commande suivante:
dotnet run
Note
Vous pouvez utiliser dotnet run --project <PROJECT> pour spécifier un projet à exécuter. Par exemple, l’exécution dotnet run --project WebApp à partir de la racine de l’exemple d’application exécute également le projet WebApp .
La sortie de la console affiche des messages similaires à ce qui suit (indiquant que l’application est en cours d’exécution et attend les demandes) :
$ 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.
Dans un navigateur web, accédez à http://localhost:<port number>/api/math/sum?a=4&b=5. Vous devriez voir le résultat de 9.
Accédez à l’API de produit (http://localhost:<port number>/api/math/product?a=4&b=5). Elle retourne 9, pas 20 comme prévu. Ce problème est résolu plus loin dans le didacticiel.
Ajouter dotnet watch à un projet
L’outil dotnet watch observateur de fichiers est inclus avec la version 2.1.300 du Kit de développement logiciel (SDK) .NET. Les étapes suivantes sont requises lors de l’utilisation d’une version antérieure du Kit de développement logiciel (SDK) .NET.
Ajoutez une
Microsoft.DotNet.Watcher.Toolsréférence de package au.csprojfichier :<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Installez le package
Microsoft.DotNet.Watcher.Toolsen exécutant la commande suivante :dotnet restore
Exécuter des commandes CLI .NET à l’aide de dotnet watch
Toute commande CLI .NET peut être exécutée avec dotnet watch. For example:
| Command | Commande avec montre |
|---|---|
| dotnet run | dotnet watch run |
| dotnet run -f netcoreapp3.1 | dotnet watch run -f netcoreapp3.1 |
| dotnet exécute -f netcoreapp3.1 -- --arg1 | dotnet watch run -f netcoreapp3.1 -- --arg1 |
| dotnet test | test dotnet watch |
Exécutez dotnet watch run dans le dossier WebApp. La sortie de la console indique que watch a démarré.
L’exécution dotnet watch run sur une application web lance un navigateur qui accède à l’URL de l’application une fois prête.
dotnet watch effectue cette opération en lisant la sortie de la console de l’application et en attendant le message prêt affiché par WebHost.
dotnet watch actualise le navigateur lorsqu’il détecte les modifications apportées aux fichiers surveillés. Pour ce faire, la commande watch injecte un middleware à l'application qui modifie les réponses HTML créées par l'application. L’intergiciel ajoute un bloc de script JavaScript à la page qui permet dotnet watch d’indiquer au navigateur d’actualiser. Actuellement, les modifications apportées à tous les fichiers surveillés, y compris les fichiers de contenu statique comme .html et .css, entraînent la reconstruction de l’application.
dotnet watch:
- Surveille uniquement les fichiers qui ont un impact sur les builds par défaut.
- Tous les fichiers surveillés supplémentaires (via la configuration) entraînent toujours la création d’une build.
Pour plus d’informations sur la configuration, consultez la configuration dotnet-watch dans ce document.
Note
Vous pouvez utiliser dotnet watch --project <PROJECT> pour spécifier un projet à surveiller. Par exemple, exécuter dotnet watch --project WebApp run depuis la racine de l'application exemple lancera et surveillera également le projet WebApp.
Apporter des modifications avec dotnet watch
Assurez-vous que dotnet watch est en cours d’exécution.
Corrigez le bogue dans la Product méthode de MathController.cs sorte qu’il retourne le produit et non la somme :
public static int Product(int a, int b)
{
return a * b;
}
Enregistrez le fichier. La sortie de la console indique qu’une dotnet watch modification de fichier a été détectée et redémarrée l’application.
Vérifiez que http://localhost:<port number>/api/math/product?a=4&b=5 retourne le résultat correct.
Exécuter des tests à l’aide de dotnet watch
Changez la méthode de
ProductdeMathController.cspour de nouveau renvoyer la somme. Enregistrez le fichier.Dans un interpréteur de commandes, accédez au dossier WebAppTests .
Exécutez dotnet restore.
Exécutez
dotnet watch test. Sa sortie indique qu’un test a échoué et que l’observateur attend les modifications de fichier :Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.Corrigez le code de méthode
Productafin qu’il retourne le produit. Enregistrez le fichier.
dotnet watch détecte la modification du fichier et réexécute les tests. La sortie de la console indique les tests réussis.
Personnaliser la liste des fichiers à surveiller
Par défaut, dotnet-watch effectue le suivi de tous les fichiers correspondant aux modèles glob suivants :
**/*.cs*.csproj**/*.resx- Fichiers de contenu :
wwwroot/**,**/*.config,**/*.json
Vous pouvez ajouter d’autres éléments à la liste de surveillance en modifiant le .csproj fichier. Les éléments peuvent être spécifiés individuellement ou à l’aide de modèles glob.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
Désactiver les fichiers à surveiller
dotnet-watch peut être configuré pour ignorer ses paramètres par défaut. Pour ignorer des fichiers spécifiques, ajoutez l’attribut Watch="false" à la définition d’un élément dans le .csproj fichier :
<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>
Projets de montres personnalisées
dotnet-watch n’est pas limité aux projets C#. Les projets de surveillance personnalisés peuvent être créés pour gérer différents scénarios. Tenez compte de la disposition de projet suivante :
-
test/
UnitTests/UnitTests.csprojIntegrationTests/IntegrationTests.csproj
Si l’objectif est de surveiller les deux projets, créez un fichier projet personnalisé configuré pour surveiller les deux projets :
<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>
Pour démarrer le suivi des fichiers sur les deux projets, accédez au dossier de test . Exécutez la commande suivante :
dotnet watch msbuild /t:Test
VSTest s’exécute lorsqu’un fichier change dans l’un ou l’autre projet de test.
dotnet-watch configuration
Certaines options de configuration peuvent être transmises à dotnet watch par des variables d’environnement. Les variables disponibles sont les suivantes :
| Setting | Description |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
Si la valeur est « 1 » ou « true », dotnet watch utilise un observateur de fichiers d’interrogation au lieu de CoreFx.FileSystemWatcher Utilisé pour surveiller des fichiers sur des partages réseau ou des volumes montés dans Docker. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Par défaut, dotnet watch optimise la build en évitant certaines opérations telles que l’exécution de la restauration ou la réévaluation de l’ensemble des fichiers surveillés sur chaque modification de fichier. Si la valeur est « 1 » ou « true », ces optimisations sont désactivées. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run tente de lancer des navigateurs pour les applications web configurées avec launchBrowser dans launchSettings.json. Si la valeur est « 1 » ou « true », ce comportement est supprimé. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run tente d’actualiser les navigateurs lorsqu’il détecte les modifications de fichier. Si la valeur est « 1 » ou « true », ce comportement est supprimé. Ce comportement est également supprimé s’il DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER est défini. |
Browser refresh
dotnet watch injecte un script dans l’application qui lui permet d’actualiser le navigateur lorsque le contenu change. Dans certains scénarios, par exemple lorsque l’application active la compression de la réponse, dotnet watch peut ne pas être en mesure d’injecter le script. Dans ce cas de développement, injectez manuellement le script dans l’application. Par exemple, pour configurer l’application web pour injecter manuellement le script, mettez à jour le fichier de disposition pour inclure _framework/aspnet-browser-refresh.js:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
Non-ASCII characters
Visual Studio 17.2 ou version ultérieure inclut le Kit de développement logiciel (SDK) .NET 6.0.300 ou version ultérieure. Avec le Kit de développement logiciel (SDK) .NET et la version 6.0.300 ultérieurement, dotnet-watch émet des caractères non ASCII dans la console pendant une session de rechargement à chaud. Sur certains hôtes de console, tels que le conhost Windows, ces caractères peuvent apparaître illisibles. Pour éviter les caractères illisibles, envisagez l’une des approches suivantes :
- Configurez la variable d’environnement
DOTNET_WATCH_SUPPRESS_EMOJIS=1pour supprimer l’émission de ces valeurs. - Basculez vers un autre terminal, par exemple https://github.com/microsoft/terminal, qui prend en charge le rendu de caractères non ASCII.