有没有办法让这个场景有效?
有一个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程序集,而不是调用脚本本身.