我正在使用Mono Evaluator类来运行C#脚本。如果代码中存在语法错误,则会将错误输出到控制台。我宁愿将输出返回给String。我知道我可以重定向整个控制台,但我更愿意只获取Evaluator的输出。
有一个MessageOutput属性,它是一个TextWriter,但我不知道如何处理它。
答案 0 :(得分:1)
在这里猜猜......
创建新的System.IO.StringWriter
并将其分配给MessageOutput
?
如果有效,您可以通过ToString()
获取StringWriter的内容。
答案 1 :(得分:0)
我知道这是一个老问题,但我也只是在寻找答案。这是我最终在var lastOutput
中捕获输出(可能是或可能不是“Error”输出,你需要解析它)。
这个想法是这样的:
1)创建一个新的ConsoleReportPrinter并传入CustomTextWriter,以便我们可以捕获Write / WriteLine调用
2)然后将新的ReportPrinter作为新的CompilerContext
class CustomTextWriter : TextWriter
{
private string lastOutput { get; set; }
public CustomTextWriter() { }
public override void Write(string value)
{
lastOutput = value;
Console.Write(value);
}
public override void WriteLine(string value)
{
lastOutput = value;
Console.WriteLine(value);
}
public override Encoding Encoding
{
get
{
return Encoding.Default;
}
}
}
static void Main(string[] args)
{
ReportPrinter r = new ConsoleReportPrinter(new CustomTextWriter());
evaluator = new Evaluator(new CompilerContext(
new CompilerSettings(),
r));
// all evaluations now will pass through our CustomTextWriter
}