2017-11-10 1 views
0

Mono.CSharp.Evaluator 클래스를 사용하여 C# 스크립트를 실행 중이며 Console.WriteLine() 또는 Debug.WriteLine() 문을 스크립트에 사용하고 싶습니다. 그런 출력을 다시 "호스팅"응용 프로그램으로 리디렉션 할 수있는 방법이 있습니까?Mono C# evaluator - 리디렉션 스크립트 콘솔 출력

코드 스 니펫 : -

var sb = new StringBuilder(); 
var reportWriter = new StringWriter(sb); 
var reportPrinter = new ConsoleReportPrinter(reportWriter); 
var compilerContext = new CompilerContext(settings, reportPrinter); 
var evaluator = new Evaluator(compilerContext); 

evaluator.Run("Console.WriteLine(""Hello!"");"); 

그 이름을 감안할 때 나는 ConsoleReportPrinter이 목적을 위해 설계,하지만 난 여기 아무것도 (이에 기록 실제로 모두 StringBuilder)를 볼 수있는 유일한 시간이 구문을보고하는 것입니다되었을 수 있습니다 희망 스크립트의 오류. 나는 해결책을 내놓았다 더 파고 후

답변

0

...

Evaluator (나는 생각한다)가 (이 클래스는 통해 노출되어 실행되는 스크립트 래퍼 역할을한다는 "상호 작용하는 기본 클래스를"사용 Evaluator.InteractiveBaseClass 속성).

소스를 보면 값 기본값 "있는 console.out"을 "출력"이라는 정적 TextWriter에 속성이 있습니다 InteractiveBase라는 클래스에이 기본 설정됩니다. 내가 한 것은 내 기존의 StringBuilder 출력을 캡처 할 수 있습니다이 내 자신의 StringWriter를 할당했다 :

var outputStringWriter = new StringWriter(sb); 
InteractiveBase.Output = _outputStringWriter; 

를이 여전히 날 스크립트 내에서 Console.WriteLine()을 사용하게하지만, 스크립트 액세스하지 않습니다 "대화 형 기본 클래스"의 속성 또는 메서드를 호출 할 수 있으므로 내 스크립트에서 다음을 호출 할 수 있습니다.