Rik*_*iki 3 c# security scripting dynamic-compilation
在我的游戏中(也用C#编写)我希望包含某种自定义支持.速度是一个很大的问题因为我打算将游戏的主要部分卸载到脚本中.因此,我选择使用C#来编写游戏事件和内容的脚本.用户还应该能够在C#中为游戏编写脚本和插件.(我知道C#不是一种脚本语言.)
我将为用户提供一个(静态)类,其中包含与游戏交互所需的所有功能.用户还可以提供代码作为源代码(在这种情况下游戏将编译它). 在某些情况下,编译的用户"脚本"也可以/将被传输给其他玩家.例如,用户可以在他的家中或其他任何地方构建脚本陷阱.
这是我的问题:
安全
如何确保所提供的代码仅被强制调用所提供的API(类)的内容?为了防止欺骗脚本,恶意活动......
有没有办法在某种VM或低信任环境中运行已编译的代码?
速度
这种方法会足够快吗?(每隔一帧或每隔一帧调用多达100个自定义程序集的功能).关于这个的任何提示?
也许通过将所有用户内容编译成一个大型组件或其他任何东西来获得速度优势?
尺寸
如何使编译后的代码变小(除了压缩它)?因为玩家可能需要下载数十个脚本......
有没有办法去除不是绝对必要的东西?像调试信息或类名等...
运行时编译对我来说是相当新的(这就是我在这里问的原因).因此,指出一些重大的初学者错误和/或安全问题会很好.
只是为了澄清:用户插件/脚本或任何你想要调用它的类将是一个类(也用C#编写),它必须实现特定的功能,如"GetAddonInfo","Init","Update"...就像一个普通的C#类,派生自我的抽象"Addon"类.
您想看一下旧的Microsoft示例项目的这种返工
http://terrarium2.codeplex.com/
它基本上做你想要的一切.
将代码编译为DLL并在environemnt中运行它们
检查允许的API调用.
等等
重写了第2版以利用Web服务和许多其他功能.从您的问题来看,您可能对Terrarium 1更感兴趣.但是,我似乎无法追踪它,因此您可能需要"解决"更复杂的2.0版本.