Construye scripts de Python y llama a métodos desde C #
¿Hay alguna manera de hacer que este escenario funcione?
Hay un script en Python. Está integrado en una DLL ejecutando este script con IronPython:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
El objetivo es llamar a los métodos de este DLL desde el código C #.Reflector .NET muestra que hay una clase en la DLL -DLRCashedCode
y los métodos que nos interesan son los métodos estáticos privados de esta clase.
Por ejemplo, hay una función en el script:
def scriptMethod(self, text):
...
Su representación en la DLL es:
private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Closure
yPythonFunction
son clases de IronPython (de Microsoft.Scripting.dll y IronPython.dll).
Hasta ahora tan bueno. ¿Es posible que este método sea llamado por código C #? La idea de utilizar la reflexión como
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);
Parece más difícil debido a la configuración de los parámetros del método. Si se inicializan correctamente (¿cómo?), ¿Podemos esperar que el método funcione sin problemas?
¿Hay una mejor manera de llamar a estos métodos desde C #? Por varias razones diferentes, preferimos que el script se compile como un ensamblado .NET y no se llame al script en sí.