首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mono C# evaluator -重定向脚本控制台输出

Mono C# evaluator -重定向脚本控制台输出
EN

Stack Overflow用户
提问于 2017-11-10 19:38:41
回答 2查看 199关注 0票数 1

我正在使用Mono.CSharp.Evaluator类来运行C#脚本,并且希望在脚本中使用Console.WriteLine()Debug.WriteLine()语句。有没有办法将这样的输出重定向回“托管”应用程序?

代码片段:-

代码语言:javascript
复制
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 )是报告脚本中的语法错误。

EN

回答 2

Stack Overflow用户

发布于 2017-11-10 20:25:04

经过进一步的挖掘,我想出了一个解决方案。

Evaluator利用了一个“交互式基类”,它(我认为)充当正在执行的脚本的包装器(这个类是通过Evaluator.InteractiveBaseClass属性公开的)。

看一下源代码,这默认是一个名为InteractiveBase的类,它有一个名为“TextWriter”的静态输出属性,其值默认为"Console.Out“。我所做的是将我自己的Stringwriter分配给它,它允许我捕获到现有StringBuilder的输出:

代码语言:javascript
复制
var outputStringWriter = new StringWriter(sb);
InteractiveBase.Output = _outputStringWriter;

这仍然不能让我在脚本中使用Console.WriteLine(),但是脚本可以访问“交互式基类”的任何属性或方法,所以在我的脚本中我可以调用:

代码语言:javascript
复制
Output.WriteLine("...");
票数 1
EN

Stack Overflow用户

发布于 2021-06-03 14:00:52

在将我自己的打印函数作为局部变量注入时,我发现已经有一个全局方法print(object value)可以调用,它可以写到std out。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47221972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档