J'écris une classe .NET qui doit analyser la ligne de commande du processus. Je ne veux pas avoir de dépendance entre la méthode Main() et cette classe. Comment la classe peut-elle accéder à la ligne de commande?Comment accéder aux paramètres de ligne de commande en dehors de Main en C#
Répondre
Appelez Environment.GetCommandLineArgs()
.
System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments
En fait, cela ne semble pas fonctionner. Il semble toujours vide. Voir http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten
Créez une classe qui contient les options de votre application. Dans la méthode principale, créez une instance de cette classe, initialisez-la avec les arguments de la ligne de commande et transmettez-la aux classes qui en ont besoin.
Vous pouvez également initialiser la classe à tout moment par la suite en la faisant créer via une méthode CustomConfigClass.Create()
qui utilise Environment.GetCommandLineArgs()
. La première option serait ma recommandation, car elle rend la classe plus facile à préparer pour les tests unitaires et passer à une autre méthode de configuration à une date ultérieure sans casser l'application en raison d'une dépendance à la ligne de commande.
La première option nécessite toujours la méthode principale pour connaître l'autre classe, donc cela ne résout pas mon problème. J'utilise un conteneur IOC, par conséquent je vais créer un service qui expose la fonctionnalité GetCommandLineArgs et en rende mon autre service. Merci. –
Cela manque légèrement mon point, cependant. Si vous utilisez IoC, alors ne disposez pas d'un service pour retourner les arguments de la ligne de commande, avoir une interface de service qui retourne la configuration, et l'implémenter avec une classe qui l'obtient à partir de la ligne de commande. De cette façon, vous pouvez remplacer avec une autre classe pour les tests unitaires. –
Chaîne [] myStr = Environnement.GetCommandLineArgs();
c'est toujours bon pour compléter l'exemple.
Si vous utilisez la méthode Compact Framework .NET, Environment.GetCommandLineArgs() ne sont pas mis en œuvre et System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments retourne toujours une chaîne vide, alors vous devez utiliser la fonction principale et passez des arguments à vos autres classes.
Un exemple:
[MTAThread]
static void Main(String[] commandLineArguments)
{
CommandLineHelper.parse(commandLineArguments);
}
public static class CommandLineHelper
{
public static void parse(String[] commandLineArguments) {
// add your code here
}
}
Merci pour le heads-up du Compact Framework. Dans mon cas, je ne voulais pas montrer le formulaire principal quand les arguments étaient spécifiés, de sorte que l'exe fonctionnerait en mode silencieux, mais comme vous l'avez suggéré, vous pouvez stocker ces arguments sur la classe statique qui serait disponible pour toutes les formes. application. Cela devrait fonctionner dans n'importe quel cadre. Pour ceux qui étaient intéressés ici, c'était mon code. [MTAThread] static void Main (Chaîne [] cmd) { if (cmd.Length == 0) Application.Run (nouveau frmMain()); sinon MessageBox.Show (cmd [0]); } – kuklei
- 1. CD de ligne de commande (changement de répertoire) en C#?
- 2. Comment accéder aux images dans un répertoire en dehors de l'application Web
- 3. Comment accéder aux paramètres de police d'utilisateur d'Internet Explorer?
- 4. Passage des paramètres de la ligne de commande JUnit en eclipse
- 5. Comment accéder aux propriétés d'un contrôle utilisateur en C#
- 6. Outil de "marque-page" en ligne de commande sur Windows?
- 7. Accéder aux variables de classes statiques en C++?
- 8. accéder aux arguments de ligne de commande à partir du groupe OSGi
- 9. Accéder à ServletContext en dehors d'une servlet
- 10. Comment accéder aux paramètres de la requête dans Struts2?
- 11. Comment accéder aux colonnes de curseur sans FETCH .. EN
- 12. Comment puis-je utiliser NSLog dans main() mais en dehors de NSApplicationMain?
- 13. Accéder aux données de Reuters en Python
- 14. Aide en ligne de commande TFS
- 15. Exécutez firefox addons en ligne de commande
- 16. Comment accéder aux classes d'effets GDI + en C#
- 17. Transforme l'entrée de la ligne de commande en un tableau
- 18. Comment accéder à la ligne de commande dans Adobe Air
- 19. Outils d'édition vidéo en ligne de commande
- 20. Comment accéder alternativement aux accesseurs en tant qu'indices de tableau?
- 21. Est-ce que .NET peut vérifier d'autres paramètres de ligne de commande en cours d'exécution?
- 22. ligne de commande d'entrée de tuyau en Java
- 23. Comment compiler un fichier C# en dehors de App_Code?
- 24. Accéder aux paramètres de l'application depuis ASP.Net MVC View
- 25. Comment accepter un md5sum via une ligne de commande en C?
- 26. Renvoyer les adresses d'objets créés en dehors de la fonction main()
- 27. accéder aux icônes de la barre des tâches de Windows en C++
- 28. Accéder aux commentaires en XML en utilisant XPath
- 29. accéder aux paramètres de la demande depuis le validateur interne
- 30. Meilleure application de suivi de temps en ligne de commande?
GetCommandLineArgs est [gravement viciée] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Éviter. Passez le mot. – Neolisk