首页 > 解决方案 > .net 框架中用户脚本的受控执行

问题描述

我的用户想要的是在我们的系统中编写和添加“存储过程”(不是 SQL)。这些程序在用户定义的函数中包含用户逻辑,处理内存对象,使用高级数据结构,如列表、结构、字典。这些脚本创建内存中的 XML 文件。

脚本被其他用户审查——执行子系统必须保证脚本不会对服务器造成任何损害。脚本访问外部资源(文件系统、sql 数据库等)是不可接受的,但应使用应用程序公共 API - 最好的方法是使用自定义对象实例方法。因此脚本应该在执行期间与环境通信,但只能通过受控方式。不能吃掉所有的记忆,不能永远奔跑。

脚本可以编写应该​​被捕获和显示的输出消息。如果有办法以某种方式调试脚本执行,那将是一笔财富。

我是这个问题空间的新手。脚本语言不指定,可以是python、powershell、C#脚本,什么都可以。我在研究阶段发现了 CSharpScript ( https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples ),但我不确定这是否是最好的选择。有谁知道一个更好的起点吗?我们应该如何解决这个问题——因为我们不想编写脚本语言,定义解析器并自己执行脚本。感谢您的建议!

标签: c#scriptinguser-defined-functionsexecution

解决方案


碰巧的是,roslyn(微软代码分析)是编译和构建程序集的好功能,然后与其他外部 DLL 结合起来很容易。使用反射可以启动脚本,因此可以启动执行。

但是控制执行时间,限制资源使用(内存,cpu,...),限制外部资源(磁盘,网络,数据库,...)的访问并不是一件容易的事。


推荐阅读