【发布时间】:2011-10-31 19:58:12
【问题描述】:
在我的游戏(也是用 C# 编写的)中,我想包含某种自定义支持。 速度是一个很大的问题,因为我计划将游戏的主要部分卸载到脚本中。 因此,我选择使用 C# 编写游戏内事件和内容的脚本。 用户还应该能够使用 C# 为游戏编写脚本和插件。 (我知道 C# 不是脚本语言。)
我将为用户提供一个(静态)类,其中包含与游戏交互所需的所有功能。 用户还可以提供代码作为源代码(在这种情况下,游戏将编译它)。 编译用户“脚本”在某些情况下可以/也将传输给其他玩家。 例如,用户可以在家中或其他任何地方构建脚本陷阱。
这是我的问题:
-
安全
如何确保提供的代码只能调用提供的 API(类)的东西?为了防止脚本作弊、恶意活动...
有没有办法在某种虚拟机或低信任环境中运行编译后的代码??
-
速度
这种方法是否足够快? (每秒或每秒从多达 100 个自定义程序集中调用函数)。 这方面有什么建议吗?
也许可以通过将所有用户内容编译成一个大程序集或其他什么来获得速度优势??
-
尺寸
我怎样才能使编译后的代码变小(除了压缩它)? 因为玩家可能需要下载几十个脚本……
有没有办法去除非绝对必要的东西?比如调试信息或类名之类的......
运行时编译对我来说相当新(这就是我在这里问的原因)。因此,最好能指出一些主要的初学者错误和/或安全问题。
编辑:
只是为了澄清: 用户插件/脚本或任何你想调用的东西都是一个类(也是用 C# 编写的),它必须实现特定的功能,如“GetAddonInfo”、“Init”、“Update”...... 就像从我的抽象“Addon”类派生的普通 C# 类一样。
【问题讨论】:
标签: c# security scripting dynamic-compilation