相关疑难解决方法(0)

从C#构建Python脚本和调用方法

有没有办法让这个场景有效?

有一个Python脚本.它通过使用IronPython运行此脚本而内置到DLL中:

import clr
clr.CompileModules("CompiledScript.dll", "script.py")
Run Code Online (Sandbox Code Playgroud)

目标是从C#代码调用此DLL的方法..NET Reflector显示DLL中有一个类 - DLRCashedCode我们感兴趣的方法是此类的私有静态方法.

例如,脚本中有一个函数:

def scriptMethod(self, text):
...
Run Code Online (Sandbox Code Playgroud)

它在DLL中的表示是:

private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Run Code Online (Sandbox Code Playgroud)

Closure并且PythonFunction是IronPython类(来自Microsoft.Scripting.dll和IronPython.dll).

到现在为止还挺好.是否有可能通过C#代码调用此方法?使用反射的想法

Type t = typeof(DLRCachedCode);

string methodName = "scriptMethod";
MethodInfo method = t.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Static);

object[] parameters = new object[] { "param1", "param2" };  // the "params problem"
method.Invoke(null, parameters);
Run Code Online (Sandbox Code Playgroud)

因为设置方法的参数似乎更难.如果它们(如何)正确初始化,我们是否可以期望该方法能够顺利运行?

有没有更好的方法从C#调用此方法?出于各种不同的原因,我们希望将脚本构建为.NET程序集,而不是调用脚本本身.

c# python ironpython

10
推荐指数
2
解决办法
7538
查看次数

标签 统计

c# ×1

ironpython ×1

python ×1