标签: dynamic-compilation

C#脚本和安全性

在我的游戏中(也用C#编写)我希望包含某种自定义支持.速度是一个很大的问题因为我打算将游戏的主要部分卸载到脚本中.因此,我选择使用C#来编写游戏事件和内容的脚本.用户还应该能够在C#中为游戏编写脚本和插件.(我知道C#不是一种脚本语言.)

我将为用户提供一个(静态)类,其中包含与游戏交互所需的所有功能.用户还可以提供代码作为源代码(在这种情况下游戏将编译它). 在某些情况下,编译的用户"脚本"也可以/将被传输给其他玩家.例如,用户可以在他的家中或其他任何地方构建脚本陷阱.

这是我的问题:

  1. 安全

    如何确保所提供的代码仅被强制调用所提供的API(类)的内容?为了防止欺骗脚本,恶意活动......

    有没有办法在某种VM或低信任环境中运行已编译的代码?

  2. 速度

    这种方法会足够快吗?(每隔一帧或每隔一帧调用多达100个自定义程序集的功能).关于这个的任何提示?

    也许通过将所有用户内容编译成一个大型组件或其他任何东西来获得速度优势?

  3. 尺寸

    如何使编译后的代码变小(除了压缩它)?因为玩家可能需要下载数十个脚本......

    有没有办法去除不是绝对​​必要的东西?像调试信息或类名等...

运行时编译对我来说是相当新的(这就是我在这里问的原因).因此,指出一些重大的初学者错误和/或安全问题会很好.

编辑:

只是为了澄清:用户插件/脚本或任何你想要调用它的类将是一个类(也用C#编写),它必须实现特定的功能,如"GetAddonInfo","Init","Update"...就像一个普通的C#类,派生自我的抽象"Addon"类.

c# security scripting dynamic-compilation

3
推荐指数
1
解决办法
815
查看次数

"-Bdynamic"编译标志有什么作用?

我正在阅读英特尔Inspector XE 2013文档,他们提到了标志"-Bdynamic"的设置.谁能告诉我这面旗子有什么作用?我已经搜索了gnu编译选项,但还没有看到这个.

谢谢,Sheeri

c c++ dynamic-compilation

2
推荐指数
1
解决办法
3653
查看次数

如何在运行时创建分部类?

如何在运行时创建分部类?

示例:我有一个班级

public partial class A
{

}
Run Code Online (Sandbox Code Playgroud)

我想在运行时从XML文件创建我的A类的一部分.因为我在编码代码时没有编译我的项目.我知道这意义不大,但我需要这个.

XOML文件适合我吗?

c# dynamic-compilation

1
推荐指数
2
解决办法
934
查看次数

如何使用同一应用程序(Xamarin Forms)定位多个客户?

=> Xamarin形式

=>在Mac上使用Xamarin Studio(但我也可以使用Visual Studio)


想象一个具有图像(客户徽标),登录名(条目控件),密码(条目控件)和一个登录按钮的通用登录应用程序。

我想为多个客户(从1到99)构建这个应用程序。每个应用程序在以下方面有所不同:

  • 名称(应用名称和应用内的多个标签),
  • 徽标(应用中的图片控件可访问网络上的图片地址),
  • 连接字符串(这是应用程序中的const),
  • 应用程序的主要颜色。

我想到要使用Resources(.resx)或某种编译指令。但我不确定如何正确执行任何操作。

先感谢您!

compilation dynamic-compilation targets xamarin.forms

1
推荐指数
1
解决办法
710
查看次数

Dart VM本身在`dart:mirrors`中实现`eval`,开发人员使用它.是否计划将此方法公之于众?

这是eval在Dart平台中使用此方法的代码.

这是通过反射完成的.

运行/ LIB/mirrors_impl.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)

运行/ LIB/mirrors.cc

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)

eval dynamic-compilation dart dart-mirrors dart-sdk

0
推荐指数
1
解决办法
446
查看次数