Можно ли использовать этот сценарий?
Существует Python script. Он встроен в DLL, запустив этот script с IronPython:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
Цель состоит в том, чтобы вызвать эти DLL-методы из кода С#. .NET Reflector показывает, что в DLL есть один класс - DLRCashedCode
, а методы, которые нас интересуют, - это частные статические методы этого класса.
Например, в script есть функция:
def scriptMethod(self, text):
...
Его представление в DLL:
private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Closure
и PythonFunction
являются классами IronPython (из Microsoft.Scripting.dll и IronPython.dll).
Пока все хорошо. Возможно ли, что этот метод вызывается кодом С#? Идея использования отражения как
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);
кажется сложнее из-за установки параметров метода. Если они (каким-либо образом) инициализированы правильно, можем ли мы ожидать, что метод будет работать плавно?
Есть ли лучший способ вызвать эти методы из С#? По разным причинам мы предпочитаем, чтобы script был создан как сборка .NET, а не вызывал сам script.