2009-09-10 9 views
10

私のコマンドを私のDebug.WriteLine()ステートメントで私の "出力"ウィンドウに表示させたいと思います。私はこれを一度行う方法を考え出したと思うが、私は覚えていない/もう一度それを行う方法をGoogle上で見つけることはできない。 私はコンソールの出力に表示されるように、コンソールおよびデバッグ文を賭けする方法の手順の多くを見つけるapp.configコンソールをapp.config内のビジュアルスタジオデバッグ出力ウィンドウにリダイレクト

でこれを行うことができることを覚えているようだが、それらはに表示されるように取得することではありませんか」出力]ウィンドウを開きます。

誰でも知っていますか?

答えて

18

基本的に最も簡単な解決策は、このようになります。

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

、あなたがプログラムの初期設定に追加する必要があり、このライン "Console.SetOut(新ToDebugWriter());"

+0

良い答え。ありがとう! –

+1

くそー!私は最終的にVisual StudioでNHibernateのクエリを見ることができます! –

+0

ありがとう!なぜ 'base.WriteLine'の呼び出しに気をつけますか? –

1

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

System.Debugは、TraceListenerCollectionTraceListenerに出力します。最初に登録されたTraceListenerは1つだけです。これはDefaultTraceListenerです。ストリームオブジェクトを使用せず、出力にネイティブメソッドを使用します。

おそらくVisual Studio APIを使用する方法があります。

3

@Avram's answer私のシステムでlog4netのConsoleAppenderが使用していたものではありません。 (私は。のVisual Studioの「デバッグ」を出力ペインにConsole.SetOutようにlog4netのConsoleAppender出力に興味がある)だから私は、その一つ以上を前提になどstringobjectchar[]を受け入れるStringWriterWriteWriteLineすべてのメソッドを、オーバーライドこれらのうちConsoleAppenderConsole経由で呼び出していました。

これが成功し、「デバッグ」ペインにlog4netのログが表示されるようになりました。

同様の目標を持つ人のために、以下のコードを追加します。 (私は完全に安全であるため、残りのStringWriter.Write.WriteLineのメソッドをオーバーライドすることができます)。baseへの呼び出しを削除しました。これらは不要であると思われ、StringWriter )。

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); 
     } 
    } 
} 
関連する問題