문제

나는 내 것을 얻고 싶다 Console.WriteLine() 내 "출력"창에 내 명령이 내 Debug.WriteLine() 진술. 나는 이것을 한 번 수행하는 방법을 알아 냈다고 생각하지만 Google에서 다시 수행하는 방법을 기억할 수 없습니다. 나는 이것을 할 수 있다는 것을 기억하는 것 같습니다. app.config 파일.

콘솔의 출력에 콘솔 및 디버그 명령문을 얻는 방법에 대한 많은 지침을 발견하지만 "출력"창에 표시되는 방법은 아닙니다.

가능합니까?

도움이 되었습니까?

해결책

기본적으로 가장 간단한 솔루션은 다음과 같습니다.

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

프로그램의 초기화 에이 줄을 추가해야합니다.

Console.SetOut(new ToDebugWriter());

다른 팁

@avram의 대답 그의 코드의 단일 오버로드가 Log4net의 코드가 아니었다는 점을 제외하고는 저를 위해 일했습니다. ConsoleAppender 내 시스템에서 사용하고있었습니다. (나는 관심이있다 Console.SetOut 그래서 log4net ConsoleAppender Visual Studio의 "Debug"출력 창에 대한 출력.) StringWriter'에스 Write 그리고 WriteLine 방법을 수락합니다 string, object, char[], 이들 중 하나 이상이 무엇이라고 가정하자마자 ConsoleAppender 전화를 걸고 있었다 Console.

이것은 성공했고 로그 4net 로깅은 이제 "디버그"창에 나타납니다.

비슷한 목표를 가진 사람의 이익을 위해 아래 코드를 포함하고 있습니다. (완전히 안전하기 위해서는 나머지를 무시할 수 있습니다. 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);
        }
    }
}

출력 창에 스트림을 잡을 수 있다면 사용할 수 있습니다. Console.setout () 그것으로 리디렉션합니다. 그러나이 접근법은 불가능한 것 같습니다.

System.debug 모든 것에 대한 출력 tracelistener 그것에 tracelistenercollection. 처음에 등록 된 Tracelistener는 하나뿐입니다. DefaultTraceListener. 스트림 객체를 사용하지 않고 대신 출력을 위해 기본 메소드를 사용합니다.

Visual Studio API를 사용하는 접근 방식은 아마도 갈 길입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top