Correct façon de mettre en application console C#?
Quelle est la bonne façon de mettre en œuvre et l'architecte d'un outil de ligne de commande comme une application console C#?
Problèmes sont une bonne analyse de variables en ligne de commande, et la bonne façon de sortie de texte. Tandis Que La Console.WriteLine() est le choix le plus évident pour la sortie, ce sont les circonstances dans lesquelles on devrait plutôt opter pour écrire dans le flux d'erreur standard .Erreur, .SetErrorStream, etc?
Quelle est la méthode appropriée pour l'application à la sortie, tandis que le retour d'un bon code de retour à l'appel de la commande?
Comment l'événement cancelkeypress être mis en œuvre pour interrompre le programme? Est-ce uniquement pour les utiliser lors d'une opération asynchrone est en cours sur un thread séparé?
Est-il un guide concis pour la ligne de commande de l'outil de programmation en C#, ou encore mieux un projet open source ou un modèle que je pourrais utiliser pour mettre en œuvre correctement un outil assez simple?
- dupe? Voir ici: stackoverflow.com/questions/817673/...
- Voir aussi: stackoverflow.com/questions/664533/...
- Ma question est plus large exploration de l' .NET application console mécanique -- y compris la façon correcte d'utiliser ErrorStream et l'événement cancelkeypress événements. Ces deux postes se rapportent spécifiquement à la ligne de commande et analyse de la structure de la classe, respectivement.
Vous devez vous connecter pour publier un commentaire.
Messages d'erreur doit être écrit sur la sortie stderr aka Console.D'erreur, et de normal de sortie vers stdout aka Console.Out. Ceci est particulièrement important pour "filtre" type de console applications dont la sortie (stdout) peut être transmis à un autre processus, par exemple dans un fichier de commandes.
Généralement si vous rencontrez une erreur, écrivez un message d'erreur sur la Console.Erreur et retour à un résultat non nul. Ou si c'est une exception, n'ont tout simplement pas la peine de le manipuler.
Pour retourner un code de résultat, vous pouvez soit passer comme un argument à l'Environnement.Sortie, définissez l'Environnement.ExitCode de propriété, ou de retourner une valeur non nulle de main.
Pour console simple apps je voudrais:
ont une classe d'aide à analyser la ligne de commande.
avoir une façade de la classe qui fournit un testable de l'API pour les fonctionnalités mises en œuvre par votre outil de ligne de commande. Comme la plupart .NET Api, normalement, celle-ci lève une exception si une erreur se produit.
le programme principal utilise simplement de l'aide pour analyser la ligne de commande et les appels de l'API en passant les arguments passés en ligne de commande. Il peut éventuellement attrape les exceptions levées à partir de l'API, les journaux d'eux, écrit orientée utilisateur, un message d'erreur de la Console.Erreur et définit un retour non nul de code.
Mais je voulait pas considère que c'est le seul vrai chemin: il n'est pas vraiment une telle chose qui est pourquoi vous avez peu de chances de trouver le livre que vous cherchez.
Dans la mise en œuvre de la commande de l'analyse, j'ai réussi à utilisé la réflexion et les délégués avant. Ils façon dont cela fonctionne est de décorer les méthodes de commande avec un attribut spécial, vous assurez-vous que les états de la méthode doit être l'utilisateur-invokable, soit par le biais de la méthode nom ou une chaîne de caractères spécifié dans l'attribut, c'est à dire:
Au démarrage du programme, vous pouvez numériser une classe pour de telles méthodes, et de stocker les délégués qui les concernent dans un dictionnaire dont les clés sont les commandes. Cela rend plus facile à analyser les commandes basées sur la recherche de la premier mot dans un dictionnaire (amorti O(1) ) et facilement extensible et maintanable pour l'avenir, car les nouvelles commandes sont ajoutés, simplement en ajoutant méthodes distinctes.
Pour de ligne de commande de manipulation, découvrez Mono.GetOptions. Il est facile de remplir les variables de court (-f) et long (--fichier de style) options de ligne de commande.
Comme pour les arguments de ligne de commande, vous trouverez différents régimes, mais j'ai toujours été un fan de
Comme pour le code de retour, vous pouvez modifier la signature de votre
Main()
fonction de retour d'unint
plutôt quevoid
. Cela vous permettra de retourner un code pour le processus appelant, si nécessaire.Comme pour le flux d'erreur, je n'ai jamais personnellement utilisé, et je ne pense pas qu'il devrait se faire au détriment de la sortie d'erreur de l'information dans le flux de sortie standard. C'est probablement mieux utilisé pour erreur spécifique des informations de débogage.
J'ai choisi d'écrire un certain nombre de console utilitaire applications comme windows formulaire à la place des applications de console apps. En général, j'ai ajouter un timer pour le retard initial de début et de simplement ajouter un bouton annuler avec une jauge de progression--permettant ainsi une plus intuitive option annuler. Vous pouvez encore sortie de la console de cette façon aussi.