Есть ли способ заставить этот сценарий работать?
Существует скрипт Python. Он встроен в DLL путем запуска этого сценария с IronPython:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
Цель - вызвать методы этой DLL из кода C #. .NET Reflector показывает, что в DLL есть один класс - DLRCashedCode
, а интересующие нас методы являются частными статическими методами этого класса.
Например, в скрипте есть функция:
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).
Пока все хорошо. Возможно ли, чтобы этот метод вызывался кодом 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);
кажется сложнее из-за установки параметров метода. Если они (каким-либо образом) инициализированы правильно, можем ли мы ожидать, что метод будет работать гладко?
Есть ли лучший способ вызывать эти методы из C #? По разным причинам мы предпочитаем, чтобы скрипт был построен как сборка .NET, а не вызывал сам скрипт.