15

コマンドをステートメントConsole.WriteLine()と共に「出力」ウィンドウに表示したいと考えています。Debug.WriteLine()これを一度行う方法を理解したと思いますが、もう一度行う方法を思い出したり、グーグルで見つけたりすることはできません。app.configファイルでこれを行うことができたのを覚えているようです。

コンソールとデバッグステートメントをコンソールの出力に表示する方法についてはたくさんの指示がありますが、それらを「出力」ウィンドウに表示する方法はありません。

出来ますか?

4

3 に答える 3

25

基本的に、最も単純なソリューションは次のようになります。

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

そして、プログラムの初期化に次の行を追加する必要があります。

Console.SetOut(new ToDebugWriter());
于 2009-10-18T00:06:32.060 に答える
4

@Avramの答えは、彼のコードの単一のオーバーロードがlog4netConsoleAppenderが私のシステムで使用していたものではないことを除いて、私にとってはうまくいきました。(Console.SetOutlog4netの出力がVisual Studioの「デバッグ」出力ペインに出力されるように興味がありConsoleAppenderます。)したがって、これらの1つ以上が.StringWriterWriteWriteLinestringobjectchar[]ConsoleAppenderConsole

これは成功し、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);
        }
    }
}
于 2012-09-15T15:14:44.250 に答える
1

出力ウィンドウのストリームを取得できる場合は、Console.SetOut()を使用してリダイレクトできます。ただし、このアプローチは可能ではないようです。

System.Debugは、そのTraceListenerCollection内のすべてのTraceListenerに出力します。最初に登録される TraceListener は、DefaultTraceListenerだけです。ストリーム オブジェクトを使用せず、代わりに出力にネイティブ メソッドを使用します。

Visual Studio API を使用するアプローチは、おそらく進むべき道です。

于 2009-09-11T13:26:00.470 に答える