web-dev-qa-db-fra.com

Avoir la sortie d'une application console dans Visual Studio au lieu de la console

Lors de l'exécution d'une application console en Java avec Eclipse, je vois que la sortie est placée dans une zone de texte dans le IDE lui-même, au lieu de faire apparaître une console comme dans Visual Studio. Cela est pratique, car même après la sortie du programme, je peux toujours utiliser le texte qui y était écrit, car il ne sera pas effacé tant que je ne l'aurai pas exécuté à nouveau. Est-il possible de réaliser quelque chose comme ça avec Visual Studio? Je sais qu'au lieu de faire

System.Console.WriteLine(str);

Je peux faire

System.Diagnostics.Debug.WriteLine(str);

mais ce n'est pas tout à fait la même chose, car vous obtenez beaucoup de "déchets" dans la fenêtre de sortie, comme tous les symboles chargés et autres.

Mieux encore, est-il possible d’avoir tout fait dans le IDE lui-même, lorsque vous exécutez votre application, au lieu d’exécuter la console?

100
devoured elysium

Dans la boîte de dialogue Outils -> Options Visual Studio -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate".

37
SharpSteve

Dans le Visual Studio Options Dialog -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate". Ensuite, allez dans les paramètres de votre projet et changez le type de "Application console" en "Application Windows". À ce stade, Visual Studio n'ouvre plus de fenêtre de console et la sortie est redirigée vers la fenêtre de sortie de Visual Studio. Cependant, vous ne pouvez rien faire de "créatif", comme demander une saisie de clé ou de texte ou effacer la console - vous obtiendrez des exceptions d'exécution.

39
stolsvik

Utilisez System.Diagnostics.Trace

Selon les écouteurs que vous attachez, la sortie de trace peut aller à la fois à la fenêtre de débogage, à la console, à un fichier, à une base de données ou à une base de données. Les possibilités sont littéralement infinies, car mettre en œuvre votre propre TraceListener est extrêmement simple.

4
Joel Coehoorn

Assurez-vous de cocher la case "Redirect All Output ..." dans les fenêtres de paramétrage du débogage:

 Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

3
Aviram Fireberger
3
vittore

Vous pouvez créer une application wrapper que vous exécutez au lieu d'exécuter directement votre application réelle. L'application wrapper peut écouter stdout et tout rediriger vers Trace. Modifiez ensuite les paramètres d'exécution pour lancer votre wrapper et indiquez le chemin d'accès à l'application réelle à exécuter.

Le wrapper peut également associer automatiquement le débogueur au nouveau processus si un débogueur est attaché au wrapper.

1
Samuel Neff

Il est temps de vérifier la dernière version/s pour Visual Studio, les gens. La solution la plus suggérée qui ne fonctionnait pas pour certains d’entre vous pourrait peut-être fonctionner maintenant. 

Dans Visual Studio 2017 (Version 15.4.2 et versions ultérieures), le passage à Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window a fonctionné pour moi. 

Quelques notes: 1. Pour voir la fenêtre Immediate, assurez-vous que vous êtes en mode Debugging. 2. Il devrait maintenant y avoir 3 autres outils de débogage disponibles, à savoir, Pile d'appels, Points d'arrêt et Fenêtre de commande, comme indiqué ci-dessous:

 enter image description here

Meilleurs vœux!

0
kuzevni

Une solution simple qui fonctionne pour moi, pour utiliser la capacité de la console (ReadKey, String avec Format et arg, etc.) et pour voir et sauvegarder le résultat: 

J'écris TextWriter qui écris à Console et à Trace et remplace le Console.Out par celui-ci. 

si vous utilisez Dialogue -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate", vous obtenez le résultat dans la fenêtre Immédiat et assez net.

mon code: au début de mon code:

   Console.SetOut(new TextHelper());

et la classe: 

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

Remarque: je remplace tout ce dont j'avais besoin, donc si vous écrivez d'autres types, vous devez remplacer davantage

0
Sarel Foyerlicht

Au lieu de cela, vous pouvez collecter la sortie dans un résultat de test.

Vous ne pouvez pas fournir d'entrée, mais vous pouvez facilement fournir plusieurs tests avec des arguments de ligne de commande différents, chaque test recueillant la sortie.

Si votre objectif est le débogage, il s'agit d'un moyen peu pénible d'offrir un scénario de débogage reproductible.

namespace Commandline.Test
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}
0
uffehellum

Je sais que ceci est juste une autre réponse, mais je pensais écrire quelque chose pour les nouveaux développeurs Web, qui pourraient être déroutés par la partie "Changer en une application Windows", parce que je pense par défaut une application MVC dans Visual Studio 2013. La valeur par défaut est un type de sortie de la bibliothèque de classes. 

Mon application Web est définie par défaut comme type de sortie "Bibliothèque de classes". Tu n'as pas à changer ça. Tout ce que je devais faire était de suivre les suggestions d'aller dans Outils> Options> Débogage> Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate. J'ai ensuite utilisé la suggestion System.Diagnostics.Trace de Joel Coehoorn ci-dessus. 

0
joshmcode