- À partir de .NET 10 Preview 4, une nouvelle fonctionnalité permet désormais d’exécuter directement un fichier C# unique avec
dotnet run app.cs, ce qui rend possible l’exécution de code C# sans fichier de projet
- Grâce aux applications basées sur un fichier (file-based apps), il devient beaucoup plus simple d’exécuter de petits scripts, de faire des tests et d’expérimenter des idées, comme en Python ou en JavaScript
- Les références de packages NuGet, le choix du SDK et les propriétés de build peuvent aussi être gérés via des directives dans le fichier, ce qui améliore la flexibilité de développement
- La prise en charge de shebang permet aussi un usage sur les systèmes Unix pour des utilitaires CLI, des scripts d’automatisation, etc.
- Si nécessaire, il est possible de convertir facilement le fichier en application basée sur un projet, assurant une transition naturelle entre apprentissage, prototypage et développement d’applications à plus grande échelle
Qu’est-ce que dotnet run app.cs ?
- Jusqu’ici, pour exécuter du code C# avec la CLI
dotnet, il fallait obligatoirement une structure de projet (.csproj)
- Désormais, un simple fichier .cs suffit pour exécuter directement le code, ce qui réduit fortement la barrière à l’entrée
- Cette approche convient à de nombreux usages, comme les langages de script, l’automatisation, l’expérimentation ou l’apprentissage
- Grâce à l’intégration à la CLI, aucun outil supplémentaire n’est nécessaire :
dotnet suffit
- Si le code prend de l’ampleur, il peut être étendu en application basée sur un projet avec le même langage et les mêmes outils
Prise en charge des directives au niveau du fichier
- Même avec une application basée sur un fichier, il est possible de déclarer directement dans le fichier .cs les principaux réglages habituellement définis dans un projet
-
Référence à des packages NuGet
- La directive
#:package permet de référencer directement des packages NuGet
-
Choix du SDK
- La directive
#:sdk permet de spécifier le type de SDK
-
Définition de propriétés MSBuild
#:property permet de définir directement des propriétés de build
-
Prise en charge de shebang pour les scripts shell
- En ajoutant
#!/usr/bin/dotnet run tout en haut du fichier, il peut être utilisé directement comme fichier exécutable sur les systèmes Unix
Conversion vers une application basée sur un projet
Différences avec les méthodes existantes de script C#
- Jusqu’à présent, l’exécution de scripts C# était possible via des outils communautaires (CS-Script, dotnet-script, Cake, etc.), mais cela nécessitait l’installation et la configuration d’outils séparés
- Désormais, il est possible d’exécuter du code immédiatement, sans installation additionnelle ni mode spécifique, avec le même compilateur C# et le même langage
Comment démarrer
- Installer .NET 10 Preview 4
- Si vous utilisez Visual Studio Code, il faut installer C# Dev Kit ainsi que la dernière version pre-release de l’extension C# (2.79.8 ou supérieure)
- Créer un fichier
.cs, puis écrire le code directement
- Exécuter
dotnet run hello.cs dans le terminal
- Si nécessaire, convertir ensuite en projet avec
dotnet project convert hello.cs
Pour en savoir plus
Feuille de route
- La prise en charge des applications basées sur un fichier dans VS Code, l’amélioration de l’IntelliSense pour les directives, les performances et le débogage sont prévus
- D’autres fonctionnalités sont également en cours de développement, comme la prise en charge de plusieurs fichiers et l’amélioration de la vitesse d’exécution
dotnet run app.cs rend C# plus accessible tout en conservant toute la puissance de .NET
- Il fournit une base permettant de passer plus rapidement du prototypage, de la formation et de l’expérimentation au développement en production
4 commentaires
L’expérience DX proposant l’autocomplétion basée sur les File-based Apps est disponible dans la dernière version de l’extension C#, mais à l’origine Microsoft ne publiait pas l’extension ailleurs que sur la VS Code Marketplace.
Pour résoudre cet inconvénient, seule la partie C# Extension du C# Dev Kit (la partie sous licence MIT) a été configurée pour être autobuild/auto-publish séparément puis enregistrée sur OpenVSX, et je partage une courte vidéo de démonstration basée sur Kiro à partir de cela.
https://www.youtube.com/watch?v=pIi7CWOPQSA
Quand j’avais utilisé la fonctionnalité C# Interactive auparavant, je ne pouvais pas utiliser les packages qui n’étaient pas installés en local, mais apparemment cela a été amélioré maintenant.
Avis Hacker News
go run github.com/kardianos/json/cmd/jsondiff@v1.0.1en acceptant le tag dans la commande, ce qui est plutôt élégant.dotnet runmet déjà en cache le résultat de compilation, donc il n’y a pas besoin d’une couche de cache séparée (pour la désactiver :--no-build, pour voir le chemin du binaire :--artifacts-path).dotnet run <file>, en revanche, ça fonctionnait. Après une mise à jour, tout s’est mis à marcher correctement ; le problème venait du fait que le fichier utilisait des fins de ligne CRLF au lieu de LF.#!/usr/local/share/dotnet/dotnet runou#!/usr/bin/env -S dotnet rundans le shebang..dump(). Ce nouveaudotnet runpourrait plutôt devenir un outil complémentaire. J’ai déjà travaillé dans un endroit qui détestait PowerShell au plus haut point, où presque tout le scripting passait par LINQPad ; dans ce genre de contexte, c’était utile.dotnet rundans VSCode ou Visual Studio pourra se rapprocher de LINQPad. Le gros atout de LINQPad, c’est la visualisation des résultats. Sidotnet runse contente d’afficher du texte ou nécessite beaucoup de plugins, la demande pour LINQPad continuera sans doute. Pour simplement vérifier de la syntaxe, en revanche,dotnet runpeut être un meilleur choix ; il m’arrive moi aussi d’utiliser LINQPad pour tester une syntaxe qui me fait hésiter.J’ai aussi créé deux exemples concrets liés à cette fonctionnalité, que je partage en réponse. Il s’agit d’exemples de code d’applications GUI Windows et macOS utilisant un serveur MCP et Avalonia. 😊
https://forum.dotnetdev.kr/t/…