Crie scripts Python e chame métodos a partir de C #
Existe alguma maneira de fazer esse cenário funcionar?
Existe um script Python. Ele está embutido em uma DLL executando este script com IronPython:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
O objetivo é chamar os métodos dessa DLL a partir do código C #.Refletor .NET mostra que há uma classe na DLL -DLRCashedCode
e os métodos nos quais estamos interessados são métodos estáticos privados dessa classe.
Por exemplo, há uma função no script:
def scriptMethod(self, text):
...
Sua representação na DLL é:
private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Closure
ePythonFunction
são classes IronPython (do Microsoft.Scripting.dll e IronPython.dll).
Por enquanto, tudo bem. É possível que esse método seja chamado pelo código C #? A ideia de usar reflexão 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 mais difícil por causa da definição dos parâmetros do método. Se eles foram (de alguma forma) inicializados corretamente, poderíamos esperar que o método funcionasse sem problemas?
Existe uma maneira melhor de chamar esses métodos de c #? Por vários motivos diferentes, preferimos criar o script como um assembly .NET e não chamar o próprio script.