单声道评估员课程

时间:2011-01-07 02:55:12

标签: c# .net mono

我正在使用Mono Evaluator类来运行C#脚本。如果代码中存在语法错误,则会将错误输出到控制台。我宁愿将输出返回给String。我知道我可以重定向整个控制台,但我更愿意只获取Evaluator的输出。

有一个MessageOutput属性,它是一个TextWriter,但我不知道如何处理它。

2 个答案:

答案 0 :(得分:1)

在这里猜猜......

创建新的System.IO.StringWriter并将其分配给MessageOutput

如果有效,您可以通过ToString()获取StringWriter的内容。

答案 1 :(得分:0)

我知道这是一个老问题,但我也只是在寻找答案。这是我最终在var lastOutput中捕获输出(可能是或可能不是“Error”输出,你需要解析它)。

这个想法是这样的:

1)创建一个新的ConsoleReportPrinter并传入CustomTextWriter,以便我们可以捕获Write / WriteLine调用
 2)然后将新的ReportPrinter作为新的CompilerContext

的一部分传递给Evaluator
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
}