إعادة توجيه وحدة التحكم إلى Visual إطار الإخراج ستوديو التصحيح في app.config

StackOverflow https://stackoverflow.com/questions/1407974

  •  05-07-2019
  •  | 
  •  

سؤال

وأريد أن أحصل على Console.WriteLine() أوامر لتظهر في نافذتي "إخراج" مع البيانات Debug.WriteLine() بلدي. أعتقد أنني أحسب كيفية القيام بذلك مرة واحدة، ولكن لا أستطيع أن أتذكر / عثور على جوجل كيف نفعل ذلك مرة أخرى. يبدو لي أن نتذكر أن تكون قادرة على القيام بذلك في ملف app.config.

وأجد الكثير من التعليمات حول كيفية الحصول على لتظهر وحدة التحكم وتصحيح البيانات في إخراج وحدة التحكم، ولكن ليس كيفية الحصول عليها لتظهر في الإطار "إخراج".

هل من الممكن؟

هل كانت مفيدة؟

المحلول

وأساسا حل أبسط يشبه هذا.

public class ToDebugWriter : StringWriter
{
    public override void WriteLine(string value)
    {
        Debug.WriteLine(value);
        base.WriteLine(value);
    }
}

ويجب إضافة هذا الخط لتهيئة البرنامج:

Console.SetOut(new ToDebugWriter());

نصائح أخرى

@ الجواب أفرام في عملت بالنسبة لي، إلا أن الزائد واحد في التعليمات البرمجية له لم يكن الوحيد الذي log4net ل وقد ConsoleAppender استخدام على نظام بلدي. (أنا مهتم في Console.SetOut ذلك المخرجات التي log4net في ConsoleAppender إلى "تصحيح" إخراج جزء البصرية استوديو.) لذلك أنا تجاهلت كل وسائل StringWriter وWrite WriteLine لقبول string، object، char[]، وما إلى ذلك على افتراض أن واحدا أو أكثر من هذه وكان ما كان يدعو ConsoleAppender عبر Console.

ونجح هذا، ويبدو أن قطع الأشجار log4net الآن في بلدي جزء "تصحيح".

وأنا بما في ذلك رمز أدناه لصالح أي شخص مع أهداف مماثلة. (أن تكون آمنة تماما، يمكن للمرء أن تجاوز الأساليب StringWriter.Write و.WriteLine المتبقية.) لقد إزالة المكالمات إلى base لأنها تبدو وكأنها لا لزوم لها، وأعتقد أنها مجرد بناء منطقة عازلة واسعة داخل StringWriter (عادة الوصول إليها من خلال تلك الفئة ل .ToString()).

namespace GeneralLibrary.Logging
{
    using System.Diagnostics;
    using System.IO;

    public class DebugWriter : StringWriter
    {
        public override void Write(string format, object arg0)
        {
            Debug.Write(string.Format(format, arg0));
        }

        public override void Write(string format, object arg0, object arg1)
        {
            Debug.Write(string.Format(format, arg0, arg1));
        }

        public override void Write(string format, object arg0, object arg1, object arg2)
        {
            Debug.Write(string.Format(format, arg0, arg1, arg2));
        }

        public override void Write(string format, params object[] arg)
        {
            Debug.Write(string.Format(format, arg));
        }

        public override void Write(object value)
        {
            Debug.Write(value);
        }

        public override void Write(string value)
        {
            Debug.Write(value);
        }

        public override void Write(char[] buffer)
        {
            Debug.Write(buffer);
        }

        public override void Write(char[] buffer, int index, int count)
        {
            Debug.Write(new string(buffer, index, count));
        }

        public override void WriteLine(string value)
        {
            Debug.WriteLine(value);
        }

        public override void WriteLine(object value)
        {
            Debug.WriteLine(value);
        }

        public override void WriteLine(string format, object arg0)
        {
            Debug.WriteLine(format, arg0);
        }

        public override void WriteLine(string format, object arg0, object arg1)
        {
            Debug.WriteLine(format, arg0, arg1);
        }

        public override void WriteLine(string format, object arg0, object arg1, object arg2)
        {
            Debug.WriteLine(format, arg0, arg1, arg2);
        }

        public override void WriteLine(string format, params object[] arg)
        {
            Debug.WriteLine(format, arg);
        }

        public override void WriteLine(char[] buffer)
        {
            Debug.WriteLine(buffer);
        }

        public override void WriteLine(char[] buffer, int index, int count)
        {
            Debug.WriteLine(new string(buffer, index, count));
        }

        public override void WriteLine()
        {
            Debug.WriteLine(string.Empty);
        }
    }
}

وإذا كان يمكنك الحصول على عقد من تيار لإطار الإخراج يمكنك استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.console.setout.aspx" يختلط = " نوفولو noreferrer "> Console.SetOut () لتوجيه إليها. ولكن هذا النهج لا يبدو أن يكون ممكنا.

مخرجات

System.Debug لكل < وأ href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx" يختلط = "نوفولو noreferrer"> TraceListener في تقريرها <لأ href = "HTTP: / /msdn.microsoft.com/en-us/library/system.diagnostics.debug.listeners.aspx "يختلط =" نوفولو noreferrer "> TraceListenerCollection . هناك TraceListener واحدة فقط سجلت في البداية وهو DefaultTraceListener . لا يجعل استخدام كائن تيار وبدلا من ذلك يستخدم أساليب الأصلي للإخراج.

ونهج يستخدم ستوديو API البصرية وربما كان وسيلة للذهاب.

scroll top