1

尝试运行脚本(使用 Roslyn Scripting API):

var source = "while(true) { }";
return CSharpScript.EvaluateAsync(source).Result;

它将永远运行。如何打断它?

我不介意使用其他脚本引擎,尽管要求一个是题外话。我发现了类似的问题(示例),但它们没有帮助。

背景:我想在我的软件中添加对 C# 用户编写脚本的支持。我想在沙盒中运行脚本,因此中断脚本的能力至关重要。过去我在CodeDOM方面有过一些经验,但我也没有找到一种方法来中断那里的脚本。

想法:

  • 我可以预处理用户编写的文本并在每行之后插入我的代码(检查CancellationToken和)。return/throw但是上面的例子不受这种技术的影响,然后我必须走复杂的语法解析器路线(没有经验,想法?)。
  • 我可以提供一种方法,用户必须在他的脚本有问题的地方(例如循环内部)显式调用该方法,但用户可能会简单地决定忽略它。
  • 有没有办法逐步运行脚本?沙盒调试器模式?然后我就可以检查外部请求以终止脚本并停止调试。

其他的可能性是什么?有没有人实施过安全的用户编写脚本?

4

0 回答 0