إعادة توجيه وحدة التحكم إلى Visual إطار الإخراج ستوديو التصحيح في app.config
-
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 البصرية وربما كان وسيلة للذهاب.