C# 在.net framework中控制用户脚本的执行

C# 在.net framework中控制用户脚本的执行,c#,scripting,user-defined-functions,execution,C#,Scripting,User Defined Functions,Execution,我的用户想要的是编写“存储过程”(而不是SQL)并将其添加到我们的系统中。这些过程包含用户定义函数中的用户逻辑,处理内存对象,使用高级数据结构,如列表、结构、字典。脚本创建内存中的XML文件 脚本不会被其他用户审查执行子系统必须保证脚本不会对服务器造成任何伤害。脚本访问外部资源(文件系统、sql数据库等)是不可接受的,但应使用应用程序公共API-最好的方法是使用自定义对象实例方法。因此,脚本应该在执行期间与环境通信,但只能通过受控的方式。不能吃掉所有的记忆,不能永远奔跑 脚本可能会写入应捕获和显

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

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

脚本可能会写入应捕获和显示的输出消息。如果有办法调试脚本的执行,那将是一笔财富


我是这个问题领域的新手。未指定脚本语言,可以是python、powershell、C#script或其他任何语言。我在研究阶段发现了CSharpScript(),但我不确定这是否是最好的选择。有人知道更好的起点吗?我们应该如何解决这个问题?因为我们不想编写脚本语言,所以需要定义一个解析器并自己执行脚本。谢谢你的建议

正如所发生的那样,roslyn(microsoft代码分析)是编译和构建程序集的良好功能,然后与其他外部DLL结合就很容易了。使用反射可以启动脚本,因此可以启动执行


但是控制执行时间、限制资源使用(内存、cpu等)、限制对外部资源(磁盘、网络、数据库等)的访问并非易事。

这可能更适合@Liam。这与SQL脚本无关,“存储过程”就是一个类似的例子。脚本应该工作于内存对象,不允许访问任何外部资源,包括sql Server和文件系统。这就是问题所在-如何在不允许使用某些名称空间和对象的情况下启用脚本支持。@IainMNorman谢谢,你说得对-现在我知道了:(你能用一个安全的web API展示你的可编写脚本的方法吗?然后你的脚本编写用户可以在节点中使用JavaScript访问这些API端点。他们可以提取对象,处理对象,并回发更改。JavaScript不关心类型,你的所有输出都是json,因此不需要让用户理解名称空间和对象这可能只是web开发人员的答案:)@iainmnormanooo它不是web API,在“API”中,我指的是一组可以通过脚本访问和使用的函数。脚本只能通过这些功能(授权)访问外部资源(文件、数据库实体),因此无法使用System.IO对象和方法,无法启动外部程序(如notepad.exe等),无法访问web url-s等。