Erstellen von Python-Skripten und Aufrufen von Methoden aus C #

Gibt es eine Möglichkeit, dieses Szenario zum Laufen zu bringen?

Es gibt ein Python-Skript. Es wird in eine DLL eingebaut, indem dieses Skript mit IronPython ausgeführt wird:

import clr
clr.CompileModules("CompiledScript.dll", "script.py")

Ziel ist es, die Methoden dieser DLL aus C # -Code aufzurufen..NET Reflector zeigt, dass es eine Klasse in der DLL gibt -DLRCashedCode und die Methoden, an denen wir interessiert sind, sind private statische Methoden dieser Klasse.

Zum Beispiel gibt es eine Funktion im Skript:

def scriptMethod(self, text):
...

Seine Darstellung in der DLL ist:

private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}

Closure undPythonFunction sind IronPython-Klassen (aus Microsoft.Scripting.dll und IronPython.dll).

So weit, ist es gut. Kann diese Methode mit C # -Code aufgerufen werden? Die Idee der Verwendung von Reflexion gefällt

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);

scheint schwieriger zu sein, da die Parameter der Methode festgelegt werden. Können wir erwarten, dass die Methode reibungslos funktioniert, wenn sie (wie) korrekt initialisiert wird?

Gibt es eine bessere Möglichkeit, diese Methoden von C # aufzurufen? Aus verschiedenen Gründen ziehen wir es vor, das Skript als .NET-Assembly zu erstellen und nicht das Skript selbst aufzurufen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage