在我的游戏中(也用C#编写)我希望包含某种自定义支持.速度是一个很大的问题因为我打算将游戏的主要部分卸载到脚本中.因此,我选择使用C#来编写游戏事件和内容的脚本.用户还应该能够在C#中为游戏编写脚本和插件.(我知道C#不是一种脚本语言.)
我将为用户提供一个(静态)类,其中包含与游戏交互所需的所有功能.用户还可以提供代码作为源代码(在这种情况下游戏将编译它). 在某些情况下,编译的用户"脚本"也可以/将被传输给其他玩家.例如,用户可以在他的家中或其他任何地方构建脚本陷阱.
这是我的问题:
安全
如何确保所提供的代码仅被强制调用所提供的API(类)的内容?为了防止欺骗脚本,恶意活动......
有没有办法在某种VM或低信任环境中运行已编译的代码?
速度
这种方法会足够快吗?(每隔一帧或每隔一帧调用多达100个自定义程序集的功能).关于这个的任何提示?
也许通过将所有用户内容编译成一个大型组件或其他任何东西来获得速度优势?
尺寸
如何使编译后的代码变小(除了压缩它)?因为玩家可能需要下载数十个脚本......
有没有办法去除不是绝对必要的东西?像调试信息或类名等...
运行时编译对我来说是相当新的(这就是我在这里问的原因).因此,指出一些重大的初学者错误和/或安全问题会很好.
只是为了澄清:用户插件/脚本或任何你想要调用它的类将是一个类(也用C#编写),它必须实现特定的功能,如"GetAddonInfo","Init","Update"...就像一个普通的C#类,派生自我的抽象"Addon"类.
我正在阅读英特尔Inspector XE 2013文档,他们提到了标志"-Bdynamic"的设置.谁能告诉我这面旗子有什么作用?我已经搜索了gnu编译选项,但还没有看到这个.
谢谢,Sheeri
如何在运行时创建分部类?
示例:我有一个班级
public partial class A
{
}
Run Code Online (Sandbox Code Playgroud)
我想在运行时从XML文件创建我的A类的一部分.因为我在编码代码时没有编译我的项目.我知道这意义不大,但我需要这个.
XOML文件适合我吗?
=> Xamarin形式
=>在Mac上使用Xamarin Studio(但我也可以使用Visual Studio)
想象一个具有图像(客户徽标),登录名(条目控件),密码(条目控件)和一个登录按钮的通用登录应用程序。
我想为多个客户(从1到99)构建这个应用程序。每个应用程序在以下方面有所不同:
我想到要使用Resources(.resx)或某种编译指令。但我不确定如何正确执行任何操作。
先感谢您!
这是eval在Dart平台中使用此方法的代码.
这是通过反射完成的.
_getFieldSlow(unwrapped) {
// ..... Skipped
var atPosition = unwrapped.indexOf('@');
if (atPosition == -1) {
// Public symbol.
f = _eval('(x) => x.$unwrapped', null);
} else {
// Private symbol.
var withoutKey = unwrapped.substring(0, atPosition);
var privateKey = unwrapped.substring(atPosition);
f = _eval('(x) => x.$withoutKey', privateKey);
}
// ..... Skipped
}
Run Code Online (Sandbox Code Playgroud)
static _eval(expression, privateKey)
native "Mirrors_evalInLibraryWithPrivateKey";
Run Code Online (Sandbox Code Playgroud)
DEFINE_NATIVE_ENTRY(Mirrors_evalInLibraryWithPrivateKey, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(String, expression, arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(String, private_key, arguments->NativeArgAt(1));
const GrowableObjectArray& libraries =
GrowableObjectArray::Handle(isolate->object_store()->libraries());
const int num_libraries = …Run Code Online (Sandbox Code Playgroud)