限制动态加载的程序集的执行

时间:2014-07-03 11:52:30

标签: c# reflection

我正在构建一个可以添加自定义用户bot的棋盘游戏。 根据界面定义机器人行为和决策:

public interface IBotPlayer 
{
    .....

    void Init(); 

    PlayResult Play(TableState tableState) ; 

    ..... 
}

其他用户可以在我在主应用程序中动态加载的外部程序集中实现该接口。

Assembly assembly = Assembly.LoadFile("externalLib.dll");

foreach (var botPlayerType in assembly.GetTypes().Where(t => t.IsClass && t.IsAssignableFrom(typeof(IBotPlayer)))
{
    ..........

    // Execution on a new thread th
    // Now I wanna run it in some kind of sandbox with very limited right, no disk access, no network, ...

     IBotPlayer botPlayer = Activator.CreateInstance<IBotPlayer>(botPlayerType); 
     botPlayer.Init() ;     

     ........
}
  • 好像IBotPlayer实现应该只是算法,是否可以仅使用集合来限制执行线程? **如果是的话

1 个答案:

答案 0 :(得分:1)

这个答案正是你所需要的! https://stackoverflow.com/a/5621587/2687006

我自己玩了代码并且可以说,上面答案中棘手的部分是从受限制的appdomain执行沙箱。然后,Sandboxer使用不受信任的代码加载dll并执行。