[C#] 콘솔 대신 Visual Studio에 콘솔 응용 프로그램의 출력이 있음

Eclipse를 사용하여 Java에서 콘솔 응용 프로그램을 수행 할 때 Visual Studio 에서처럼 콘솔이 팝업되는 대신 IDE 자체의 텍스트 상자에 출력이 표시되는 것을 볼 수 있습니다. 이것은 프로그램이 종료 된 후에도 다시 실행할 때까지 지워지지 않기 때문에 그 안에 쓰여진 텍스트를 잘 사용할 수 있기 때문에 편리합니다. Visual Studio로 이와 같은 것을 달성 할 수 있습니까? 하는 대신 알아

System.Console.WriteLine(str);

내가 할 수있는

System.Diagnostics.Debug.WriteLine(str);

그러나로드 된 모든 심볼과 같은 출력 창에 많은 “정크”가 표시되므로 동일한 것은 아닙니다.

더 좋은 점은 콘솔을 실행하는 대신 애플리케이션을 실행할 때 IDE 자체에서 모든 작업을 수행 할 수 있다는 것입니다.



답변

도구-> Visual Studio 옵션 대화 상자-> 디버깅-> “모든 출력 창 텍스트를 직접 실행 창으로 리디렉션”을 선택합니다.


답변

에서 비주얼 스튜디오 옵션 대화 상자 -> 디버깅 ->은 “직접 실행 창에 리디렉션 모든 출력 창 텍스트”를 확인합니다. 그런 다음 프로젝트 설정으로 이동하여 유형을 “콘솔 응용 프로그램”에서 “Windows 응용 프로그램”으로 변경합니다. 이 시점에서 Visual Studio는 더 이상 콘솔 창을 열지 않으며 출력은 Visual Studio의 출력 창으로 리디렉션됩니다. 그러나 키 또는 텍스트 입력을 요청하거나 콘솔을 지우는 것과 같은 “창의적인”작업을 수행 할 수 없습니다. 런타임 예외가 발생합니다.


답변

사용하다 System.Diagnostics.Trace

연결하는 리스너에 따라 추적 출력은 디버그 창, 콘솔, 파일, 데이터베이스 또는 한 번에 모두 이동할 수 있습니다. 자체 TraceListener를 구현하는 것이 매우 간단하기 때문에 가능성은 말 그대로 무한합니다.


답변

Visual Studio의 최신 릴리스를 확인할 때입니다. 전에는 작동하지 않았던 가장 제안 된 솔루션이 지금 작동 할 수 있습니다.

Visual Studio 2017 ( 릴리스 버전 15.4.2 이상)에서는 Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window에서 저에게 효과적 이었습니다.

참고 사항 : 1. 직접 실행 창을 보려면 디버깅 모드 에 있는지 확인하십시오 . 2. 다음과 같이 3 개의 다른 디버깅 도구, 즉 Call Stack, Breakpoints 및 Command Window를 사용할 수 있습니다.

여기에 이미지 설명 입력

최고의 소원!


답변

실제 앱을 직접 실행하는 대신 실행하는 래퍼 애플리케이션을 만들 수 있습니다. 래퍼 애플리케이션은 stdout을 수신하고 모든 것을 Trace로 리디렉션 할 수 있습니다. 그런 다음 실행 설정을 변경하여 래퍼를 시작하고 실행할 실제 앱의 경로를 전달합니다.

디버거가 래퍼에 연결된 경우 래퍼가 디버거를 새 프로세스에 자동 연결하도록 할 수도 있습니다.


답변

나는 이것이 또 다른 대답 일 뿐이라는 것을 알고 있지만 “Windows 응용 프로그램으로 변경”부분에 대해 혼란 스러울 수있는 새로운 웹 개발자를 위해 무언가를 적어 둘 것이라고 생각했습니다. 기본적으로 Visual Studio 2013의 MVC 응용 프로그램이라고 생각하기 때문입니다. 기본값은 클래스 라이브러리의 출력 유형입니다.

내 웹 애플리케이션은 기본적으로 “클래스 라이브러리”의 출력 유형으로 설정됩니다. 그것을 변경할 필요가 없습니다. 내가해야 할 일은 도구> 옵션> 디버깅> 모든 출력 창 텍스트를 직접 실행 창으로 리디렉션하는 제안을 따르는 것입니다. 그런 다음 System.Diagnostics.Trace위의 Joel Coehoorn 의 제안 을 사용했습니다 .


답변

나를 위해 작동하는 간단한 솔루션은 콘솔 기능 (ReadKey, String with Format 및 arg 등)으로 작업하고 출력을보고 저장하는 것입니다.

나는 쓰기 것을 TextWriter에 쓰기 Console및에 Trace과가 교체 Console.Out그것.

대화 상자-> 디버깅-> “모든 출력 창 텍스트를 직접 실행 창으로 리디렉션”을 선택하면 직접 실행 창에 표시되고 매우 깔끔합니다.

내 코드 : 내 코드 시작 부분 :

   Console.SetOut(new TextHelper());

그리고 수업 :

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

참고 : 필요한 것만 재정의하므로 다른 유형을 작성하는 경우 더 재정의해야합니다.