9
votes

Comment VS Compilez-vous des applications de console pour montrer «Appuyez sur n'importe quelle touche pour continuer»?

Lorsque je développe une application de console C # (qui fonctionnera sur un serveur) et que je l'exécute à l'aide de Visual Studio, je reçois une "Appuyez sur n'importe quelle touche pour continuer" message avant que le programme se termine.

Cependant, lorsque je compile manuellement le même fichier de code C # à l'aide du SCC, mon programme ne montre pas ce message et il se termine immédiatement après avoir terminé sa logique.

Est-ce que quelqu'un sait comment je peux faire la même fonctionnalité lors de la compilation du code sans utiliser de VS et sans changer le code C # aucune ajout d'une liste de lecture ()?

Mise à jour: le même message utilisé pour apparaître lorsque j'ai appris C #, j'avais l'habitude d'utiliser TextPad avec le CSC et que le message utilisé pour apparaître sans ajouter d'appels d'écriture (ligne) / lecture (ligne)


1 commentaires

Ce Lien fonctionne pour moi avec Ctrl + F5 Touches. J'utilise Visual Studio 2010.


7 Réponses :


14
votes

Ce n'est pas possible. L'invite à appuyer sur une touche est générée par Visual Studio lors de l'exécution d'une application de console. Ce n'est pas une partie de votre programme.

Le seul moyen est d'utiliser la console.Lead () dans votre code

update : concernant votre remarque sur l'utilisation de TextPad: Je ne connais pas le Textpad, mais je ne serais pas surpris si TextPad a fait la même chose que Visual Studio lors de l'exécution d'une application de console. < / p>


3 commentaires

Vous pouvez ajouter la console de ligne.Read () et le commenter lors de la livraison. Cependant, la meilleure approche que je connaisse est d'utiliser la journalisation et le journaliser toutes les informations dont vous avez besoin à des niveaux inférieur tels que des informations ou de la trace ou du débogage et de la désabination lorsque l'expédition :-)


OK merci. En ce qui concerne votre mise à jour, comme je l'ai mentionné dans mon commentaire sur la réponse de Andrew, TextPAD génère automatiquement des fichiers par lots pour y accomplir.


L'invite n'est pas générée par Visual Studio, mais par la commande pause de cmd.exe



6
votes

Vous pouvez écrire un script de lot qui exécute l'EXE pour vous et invite l'utilisateur à appuyer sur une touche.

Le script de lot ressemblerait à ceci: xxx


2 commentaires

Merci, TextPad génère automatiquement des fichiers par lots.


Je suggérerais la réponse de Chalkey à la place.



2
votes

Ce comportement n'a rien à voir avec le compilateur que vous utilisez. Lorsque vous compilez avec Visual Studio, l'exécutable en dehors de Visual Studio fonctionnera en fait exactement la même que lorsque vous compilez avec le SCC sur la ligne de commande. Visual Studio (et TextPad) ajoute la logique à ajouter le message "Appuyez sur n'importe quelle touche pour continuer" sur la console.

Si vous souhaitez que votre application reste ouverte, vous devrez faire quelque chose comme Console.Readline () pour bloquer l'exécution afin que votre application ne complète pas son exécution.


0 commentaires

22
votes

Ce n'est rien à voir avec le compilateur - si vous appuyez sur F5 KBD> pour le déboguer plutôt que CTRL-F5 KBD> à exécuter sans débogage, alors vs n'affiche pas l'invite . Ceci est vraisemblablement de sorte que vous ne manquez pas quelle que soit la sortie produisant.

Pour ce faire, Visual Studio exécute cmd.exe lui indiquant d'exécuter votre exécutable puis pause: P>

"C:\WINDOWS\system32\cmd.exe" /c ""...\ConsoleApplication1.exe"  & pause"


0 commentaires

8
votes

Vous pouvez faire cela ...

static void Main(string[] args)
{
#if DEBUG
    Console.Read();
#endif
}


1 commentaires

Naroooo, cela entraînera des raccrochables à moins que quelqu'un ne pensait ajouter une entrée de canalisée avant de commencer le script. par exemple. Echo Y | script.exe pour garder la flexibilité, il est beaucoup préférable de conserver la pause en dehors du programme.



1
votes

La question est de savoir pourquoi voudriez-vous avoir ce comportement? La touche Appuyez sur n'importe quelle touche pour continuer la fonctionnalité, afin que vous puissiez voir la sortie de votre application. Si d'autre part vous construisez votre code et que vous exécutez à partir d'une invite de commande (console), cela ne fermez pas lorsque l'application se termine, vous pouvez donc voir la sortie.

Comme indiqué ci-dessus, la touche appuyez sur n'importe quelle touche pour continuer, c'est une fonctionnalité de l'IDE et non liée au code que vous écrivez. Le but de cette fonctionnalité est de vous permettre de voir la sortie de votre application de console.


0 commentaires

3
votes

Vous pouvez le faire, si vous voulez la même fonctionnalité lors du débogage.

if (Debugger.IsAttached)
{
    Console.WriteLine("Press any key to continue . . . ");
    Console.ReadKey(true);
}


5 commentaires

Cela ne respecte pas ni c14n ni i11n.


Il n'ya aucun moyen de réaliser I11N à ce sujet, car les chaînes de ressources, utilisées par Visual Studio, ne sont pas facilement disponibles. Je ne suis vraiment pas sûr de ce que vous voulez dire avec C14N, cela ne semble pas pertinent à la question posée.


Ce n'est pas canonicalisé (C14N) parce que vous reproduisez une fonctionnalité qui existe déjà (pause). Mais je n'ai pas répondu parce que j'utilise aussi cette technique moi-même. Parfois, nous ne voulons tout simplement pas se soucier de la merde. Si cela fait suffisamment le travail.


Je n'ai jamais entendu parler de ce terme utilisé par rapport à la duplication de code, jamais. Mais, puisque la fonctionnalité n'est pas disponible, vous ne pouvez pas vraiment appeler la duplication de toute façon, alors je ne parviens toujours pas à voir votre point. Oh bien, peu importe de toute façon.


Il y a un espace à la fin là-bas également dans le message par défaut;)