如何在另一个AppDomain中运行代码?我需要沙箱我的IronPython代码

本文关键字:代码 IronPython 我的 另一个 AppDomain 运行 | 更新日期: 2023-09-27 18:03:11

我有一些IronPython代码,我将变量传递给它,并希望从python接收结果。当我在当前域中创建引擎时,我设法从IronPython获得结果:

ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine()

那么我就像这样取结果:

var result = this.pyScope.GetVariable("ObiektMS").code_1_1_1("II");

然而,我需要它沙盒,所以我创建了一个权限有限的AppDomain,并在其中运行引擎:

ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine(newDomain)

但是这次当我试图以同样的方式得到结果时,我得到

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in PythonTimeTests.exe

是因为我的"结果"变量是在一个不同的领域,结果从ironpython必须序列化?

是否可以在新域中创建变量?我想让我的程序这样做:

1。从文件中读取字典

2。创建一个具有限制的新域,并将字典传递给它。

3。通过从c#调用python函数(全部在受限域中)在iron python中工作

4。将结果返回到不受限制的域。

如何在另一个AppDomain中运行代码?我需要沙箱我的IronPython代码

是-跨域变量在域之间序列化,除非它们继承了这里所解释的MarshallByRefObject你的第二个问题是"我能……吗?"做一些c#的东西"——是的;你可以在AppDomain中做任何你想做的事情。您只需要遵循AppDomain数据传输的规则,以便在AppDomain之间传递内容。