कंसोल के बजाय विज़ुअल स्टूडियो में कंसोल एप्लिकेशन का आउटपुट होना


120

ग्रहण के साथ जावा में एक कंसोल एप्लिकेशन को करते समय, मुझे आईडीई में एक टेक्स्ट बॉक्स में डाले जा रहे आउटपुट को देखने की बजाय विजुअल स्टूडियो की तरह कंसोल पॉप अप होता है। यह काम में आता है, क्योंकि कार्यक्रम से बाहर होने के बाद भी, मैं अभी भी उस पाठ का अच्छा उपयोग कर सकता हूं जो इसमें लिखा गया था, क्योंकि यह तब तक मिटता नहीं है जब तक कि मैं इसे फिर से नहीं चलाता। क्या विज़ुअल स्टूडियो के साथ ऐसा कुछ भी हासिल करना संभव है? मुझे पता है कि करने के बजाय

System.Console.WriteLine(str);

मैं कर सकता हूँ

System.Diagnostics.Debug.WriteLine(str);

लेकिन यह बिल्कुल समान बात नहीं है, क्योंकि आपको आउटपुट विंडो में बहुत सारे "जंक" मिलते हैं, जैसा कि सभी लोड किए गए प्रतीकों और जैसे।

इससे भी बेहतर, क्या यह संभव है कि आईडीई में ही सब कुछ हो, जब आप अपना एप्लिकेशन चलाते हैं, तो कंसोल चलने के बजाय?


आप किस संस्करण का उपयोग कर रहे हैं?
गाबे

क्या आपके पास टेस्ट परिणाम फलक है?
गाबे

मैंने कभी इस पर ध्यान नहीं दिया। मैं इसे देख लूंगा। क्या मेरे पास होना चाहिए?
भगोड़ा एलिसियम

जवाबों:


52

टूल्स में -> विजुअल स्टूडियो ऑप्शंस डायलॉग -> डिबगिंग -> "तत्काल विंडो में रीडायरेक्ट ऑल आउटपुट विंडो टेक्स्ट" को चेक करें।


68
मैंने यह चेकबॉक्स चेक किया है, लेकिन मुझे अभी भी कंसोल पॉपअप मिलता है और "आउटपुट" विंडो (डिबग, टेस्ट, बिल्ड, ..) या "तत्काल विंडो" में कुछ भी नहीं मिला है।
गुइसीम

6
@ EvenLisle आपको एप्लिकेशन प्रकार को Windows अनुप्रयोग में बदलने की आवश्यकता है जैसा कि स्टॉल्सविक के उत्तर में है । इस उत्तर में उल्लिखित विकल्प किसी भी स्थिति में मेरे लिए डिफ़ॉल्ट रूप से था।
टीओटी

3
"सभी आउटपुट विंडो को तत्काल विंडो में रीडायरेक्ट करता है" विशेष रूप से क्या मतलब है? जरूरत पड़ने पर विभिन्न संदर्भों का उपयोग करें। मैं "तत्काल खिड़की" क्या है से भ्रमित हूं।
ज़ोनट्रॉन

11
@TooTone प्रश्न स्पष्ट रूप से एक "कंसोल एप्लिकेशन" के लिए कहता है और इसे केवल डिबगिंग उद्देश्यों के लिए कुछ और के लिए बदल रहा है, जहां मैं Console.ReadKey () भी सीधे हास्यास्पद नहीं हो सकता है!
मिक्यड

1
केवल Debug.WriteLine () के साथ काम करता है, Console.WriteLine () के साथ काम नहीं करता है :(
Y2i

45

में दृश्य स्टूडियो विकल्प संवाद -> डिबगिंग -> "तत्काल खिड़की पर रीडायरेक्ट सभी आउटपुट विंडो पाठ" की जाँच करें। फिर अपनी परियोजना सेटिंग्स पर जाएं और "कंसोल एप्लिकेशन" से "विंडोज एप्लिकेशन" के प्रकार को बदलें। उस बिंदु पर Visual Studio अब कंसोल विंडो नहीं खोलता है, और आउटपुट Visual Studio में आउटपुट विंडो पर पुनर्निर्देशित होता है। हालाँकि, आप कुछ भी "रचनात्मक" नहीं कर सकते, जैसे कुंजी या पाठ इनपुट का अनुरोध करना, या कंसोल को साफ़ करना - आपको रनटाइम अपवाद मिलेगा।


25
मुझे यह विशेष रूप से अनाड़ी लगता है। मुझे आश्चर्य है कि वीएस में इसके पीछे तर्क है? यह सभी आधुनिक दिन IDE की क्षमता होनी चाहिए, IDE के भीतर एक पैनल होना चाहिए जो इनपुट और आउटपुट के लिए कंसोल के रूप में व्यवहार करता है। (खरोंच सिर)

12
यह प्रश्न स्पष्ट रूप से "कंसोल एप्लिकेशन" के लिए बताता है और इसे केवल डिबगिंग उद्देश्यों के लिए कुछ और में बदल रहा है, जहां मैं भी Console.ReadKey()सीधे सीधे हास्यास्पद नहीं हो सकता!
मिक्याद

निश्चित रूप से क्यों नहीं, लेकिन जब मैंने Output typeअपने एप्लिकेशन को विंडोज एप्लिकेशन से कंसोल पर वापस लाने की कोशिश की, तो कंसोल विंडो वह नहीं है जहां मुझे अपना एप्लिकेशन चलाते समय देखा जाना चाहिए। मैं एप्लिकेशन को डिबग करने में सक्षम हूं और Mainप्रवेश बिंदु भी हिट हो रहा है। मैंने इस पोस्ट में उल्लिखित विकल्प सेटिंग को भी वापस कर दिया लेकिन कोई फायदा नहीं हुआ। मैं वीएस 2017 समुदाय संस्करण का उपयोग कर रहा हूं। मैंने अपना कंसोल विंडो (sobbing) खो दिया है
RBT

3
इसके लायक क्या है, वीएस 15.8.7 में एक ही तरीका है जिससे मैं एक कंसोल ऐप के लिए रीडायरेक्ट करने के लिए आउटपुट प्राप्त कर सकता हूं, इसे विंडोज ऐप में बदलना था, और रीडायरेक्ट बॉक्स UNCHECKED को छोड़ना था। यदि मैं बॉक्स की जांच करता हूं, तो यह आउटपुट प्रदर्शित नहीं करता है।
dpberry178 20

6

उपयोग System.Diagnostics.Trace

श्रोताओं को जो आप देते हैं उसके आधार पर, ट्रेस आउटपुट डिबग विंडो, कंसोल, एक फ़ाइल, डेटाबेस, या सभी पर एक साथ जा सकता है। संभावनाएं शाब्दिक रूप से अंतहीन हैं, क्योंकि अपने खुद के ट्रेसलिस्ट को लागू करना बेहद सरल है।


हां, लेकिन जो मैं जानना चाहता हूं वह यह है कि क्या यह सिर्फ करना संभव है, बिना खुद को लागू किए।
ईलिसियम भक्षण किया

@devoured ट्रेस क्लास डिफॉल्ट रूप से डिबग विंडो में आउटपुट करता है। आपको केवल अतिरिक्त श्रोताओं को संलग्न करने की आवश्यकता है (और कई ऐसे पहले से लिखे हुए हैं जिनका आप उपयोग कर सकते हैं) यदि आप आउटपुट को अन्यत्र भी देखना चाहते हैं।
जोएल कोएहॉर्न

1
मैं अपने डिबग ऑप्शन डायलॉग पर गया और ट्रेस आउटपुट को तत्काल विंडो में जाने के लिए "इमीडिएट विंडो के लिए सभी आउटपुट विंडो टेक्स्ट को रीडायरेक्ट करता हूं" चुना ताकि यह सभी डिबग बकवास के साथ मिश्रित न हो।
गाबे

2

यह दृश्य स्टूडियो, लोगों के लिए नवीनतम रिलीज / एस की जांच करने का समय है। सबसे अधिक सुझाया गया समाधान जो अब आप में से कुछ के लिए काम नहीं कर सकता है।

विज़ुअल स्टूडियो 2017 ( रिलीज़ संस्करण 15.4.2 और उससे ऊपर) में, Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Windowमेरे लिए काम करने जा रहा है ।

कुछ नोट्स: 1. तत्काल विंडो देखने के लिए, सुनिश्चित करें कि आप डिबगिंग मोड में हैं। 2. अब आपके निपटान में 3 अन्य डीबगिंग उपकरण उपलब्ध होने चाहिए, जैसे कॉल स्टैक, ब्रेकप्वाइंट और कमांड विंडो, जैसा कि नीचे दिखाया गया है:

यहाँ छवि विवरण दर्ज करें

शुभकामनाएँ!


V15.9.4 में परीक्षण किया गया, काम नहीं करता (कंसोल एप्लिकेशन के लिए नहीं, कम से कम)।
बट्ट

हम्म। यदि आप अपने कॉन्फ़िगरेशन का स्क्रीनशॉट साझा कर सकते हैं, तो मैं इस मुद्दे को मेरे अंत में दोहराने का प्रयास कर सकता हूं। अन्यथा, यदि आप इसे हल कर चुके हैं तो आप अपना समाधान साझा कर सकते हैं। दृश्य स्टूडियो 15.9.4 के लिए रिलीज नोट्स पर उपलब्ध है docs.microsoft.com/en-us/visualstudio/releasenotes/... , आप कुछ उपयोगी टिप्स आपकी परिवेश के आधार पर मिल सकती है। विजुअल स्टूडियो 2017 (आउटपुट विंडो) प्रलेखन : docs.microsoft.com/en-us/visualstudio/ide/reference/…
kuzevni

Doublecheck कि आप जिस प्रोजेक्ट के साथ परीक्षण कर रहे हैं, वह "कंसोल एप्लिकेशन" के रूप में बनाया गया था, न कि "विंडोज़ एप्लिकेशन"। आपका दृष्टिकोण विंडोज़ एप्लिकेशन के साथ काम करता है, लेकिन यह वह नहीं है जो ओपी निर्दिष्ट करता है।
बटा

1

आप एक रैपर एप्लिकेशन बना सकते हैं जो आप सीधे अपने असली ऐप को चलाने के बजाय चलाते हैं। रैपर एप्लिकेशन स्टडआउट को सुन सकता है और ट्रेस के लिए सब कुछ रीडायरेक्ट कर सकता है। फिर अपने रैपर को लॉन्च करने के लिए रन सेटिंग्स बदलें और चलाने के लिए वास्तविक ऐप के पथ में पास करें।

यदि रैपर से कोई डिबगर संलग्न है, तो आप रैपर ऑटो डिबगर को भी नई प्रक्रिया में शामिल कर सकते हैं।


0

मुझे पता है कि यह सिर्फ एक और जवाब है, लेकिन मैंने सोचा कि मैं नए वेब डेवलपर्स के लिए कुछ लिखूंगा, जो "चेंज टू ए विंडोज एप्लीकेशन" भाग के बारे में भ्रमित हो सकते हैं, क्योंकि मैं विज़ुअल स्टूडियो 2013 में एमवीसी एप्लिकेशन को डिफ़ॉल्ट रूप से समझता हूं क्लास लाइब्रेरी के आउटपुट प्रकार में चूक।

मेरा वेब एप्लिकेशन डिफ़ॉल्ट रूप से "क्लास लाइब्रेरी" के आउटपुट प्रकार के रूप में सेट है। आपको इसे बदलना नहीं है। मुझे केवल इतना करना था कि टूल> विकल्प> डिबगिंग> सभी आउटपुट विंडो टेक्स्ट को तत्काल विंडो पर जाने के सुझावों का पालन करें। फिर मैंने System.Diagnostics.Traceऊपर जोएल कोएहॉर्न के सुझाव का उपयोग किया ।


0

सांत्वना क्षमता (ReadKey, String with Format and arg etc) के साथ काम करने और आउटपुट को देखने और सहेजने के लिए एक सरल उपाय जो मेरे लिए काम करता है:

मैं TextWriter लिखता हूं जो इसे लिखता है Consoleऔर इसके साथ Traceप्रतिस्थापित करता Console.Outहै।

यदि आप डायलॉग -> डिबगिंग का उपयोग करते हैं -> "तत्काल विंडो में रीडायरेक्ट ऑल आउटपुट विंडो टेक्स्ट की जांच करें" तो आप इसे तत्काल विंडो में प्राप्त करें और बहुत साफ करें।

मेरा कोड: मेरे कोड के प्रारंभ में:

   Console.SetOut(new TextHelper());

और वर्ग:

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);

        }

    }

नोट: मुझे केवल वही चाहिए जो मुझे चाहिए ताकि यदि आप अन्य प्रकारों को लिखते हैं तो आपको अधिक ओवरराइड करना चाहिए


0

System.Diagnostics.Debugआउटपुट विंडो में बहुत सारे "जंक" का उत्पादन करने के बारे में: आप आउटपुट विंडो में राइट क्लिक करके इसे बंद कर सकते हैं। उदाहरण के लिए एक आइटम "मॉड्यूल लोड संदेश" है जिसे आप अक्षम करना चाहते हैं और एक आइटम "प्रोग्राम आउटपुट" जिसे आप रखना चाहते हैं।


0

आपके पास ऐसा करने के लिए तीन संभावनाएं हैं, लेकिन यह तुच्छ नहीं है। सभी आईडीई का मुख्य विचार यह है कि वे सभी बच्चे (डिबग) प्रक्रियाओं के माता-पिता हैं। इस मामले में, मानक इनपुट, आउटपुट और त्रुटि हैंडलर के साथ हेरफेर करना संभव है। इसलिए IDE बच्चे के अनुप्रयोग शुरू करते हैं और आंतरिक आउटपुट विंडो में पुनर्निर्देशित करते हैं। मैं एक और संभावना के बारे में जानता हूं, लेकिन यह भविष्य में आएगा

  1. आप Visual Studio के लिए अपना स्वयं का डीबग इंजन कार्यान्वित कर सकते हैं। डिबग इंजन नियंत्रण शुरू और आवेदन के लिए डिबगिंग। इसके लिए उदाहरण आप पा सकते हैं कि यह docs.microsoft.com पर कैसे किया जा सकता है ( विजुअल स्टूडियो डीबग इंजन )
  2. C ++ के लिए std हैंडलर के दोहराव का उपयोग करके अप्रत्यक्ष रूप से आवेदन करें या c # के लिए Console.SetOut (TextWriter) का उपयोग करें। यदि आपको आउटपुट विंडो में प्रिंट करने की आवश्यकता है तो आपको Visual Studio एक्सटेंशन SDK का उपयोग करना होगा। दूसरे संस्करण का उदाहरण जो आपको जीथब पर मिल सकता है ।
  3. System.Diagnostics.Debug.WriteLine (आउटपुट में मुद्रण के लिए) का उपयोग करने वाले एप्लिकेशन को प्रारंभ करें और इससे चाइल्ड एप्लिकेशन शुरू हो जाएगा। एक बच्चा शुरू करने पर, आपको पाइप के साथ माता-पिता में stdout को पुनर्निर्देशित करना होगा। आप MSDN पर एक उदाहरण पा सकते हैं। लेकिन मुझे लगता है कि यह सबसे अच्छा तरीका नहीं है।

0

यदि आपको Console.WriteLine से आउटपुट की आवश्यकता है, और तत्काल सभी आउटपुट विंडो टेक्स्ट को तत्काल विंडो में काम नहीं करता है और आपको NUnit.Framework का उपयोग करके एकीकृत टेस्ट एक्सप्लोरर से टेस्ट के आउटपुट को जानने की आवश्यकता है, हमारी समस्या VS 2017 में पहले से ही हल है। :

जॉन स्कीट द्वारा C # इन डेप्थ में लिया गया उदाहरण: जॉन स्कीट द्वारा C # In गहराई में लिया गया उदाहरण यह टेक्स्ट एक्सप्लोरर में इस आउटपुट का उत्पादन करता है: टास्क एक्सप्लोरर

जब हम ब्लू आउटपुट पर क्लिक करते हैं, तो बीता हुआ समय, दाईं ओर, और यह इसका उत्पादन करता है: मानक उत्पादन

मानक उत्पादन हमारा वांछित आउटपुट है, जो कंसोल कंसोल द्वारा निर्मित है।

यह कंसोल और विंडोज फॉर्म एप्लिकेशन के लिए वीएस 2017 में कार्य करता है, लेकिन केवल डिबग या रन पर टेस्ट एक्सप्लोरर के लिए उत्पन्न आउटपुट के लिए; वैसे भी, यह Console.WriteLine उत्पादन की मेरी मुख्य जरूरत है।


-1

इसके बजाय, आप एक परीक्षा परिणाम में आउटपुट एकत्र कर सकते हैं।

आप इनपुट की आपूर्ति नहीं कर सकते हैं, लेकिन आप आसानी से विभिन्न कमांड लाइन तर्कों के साथ कई परीक्षण प्रदान कर सकते हैं, प्रत्येक परीक्षण आउटपुट इकट्ठा कर रहा है।

यदि आपका लक्ष्य डिबगिंग है, तो यह एक रिपीटेबल डिबगिंग परिदृश्य की पेशकश का एक कम प्रयास तरीका है।

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

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

-7

चरण 1: समाधान एक्सप्लोरर में प्रोजेक्ट नाम पर राइट क्लिक करें फिर आउटपुट प्रकार को विंडो एप्लिकेशन के रूप में बनाएं

चरण 2: डीबग -> विकल्प ..--> डिबगिंग (विस्तार) -> सामान्य -> ​​तत्काल सभी आउटपुट विंडो पाठ को तत्काल विंडो पर भेजें


3
यह उत्तर पहले तीन बार दिया जा चुका है। यह पूछे गए प्रश्न को संबोधित नहीं करता है।
केल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.