Я пытаюсь использовать IronPython в качестве посредника между графическим интерфейсом C # и некоторыми библиотеками C #, чтобы его можно было записать в сценарий после компиляции.
У меня есть DLL библиотеки классов, которая используется обеимиGUI и python и что-то вроде этого:
namespace MyLib
{
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
this.Name = name;
}
}
}
Код IronPython выглядит следующим образом:
import clr
clr.AddReferenceToFile(r"MyLib.dll")
from MyLib import MyClass
ReturnObject = MyClass("Test")
Тогда в C # я бы назвал его следующим образом:
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = null;
scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromFile("Script.py");
source.Execute(scope);
MyClass mc = scope.GetVariable<MyClass>("ReturnObject ")
Когда я вызываю этот последний бит кода, source.Execute (scope) возвращается успешно, но при попытке вызова GetVariable выдает следующее исключение
Microsoft.Scripting.ArgumentTypeException: expected MyClass , got MyClass
Вы можете видеть, что имена классов точно такие же, но по какой-то причине они думают, что они разные.
DLL находится в другом каталоге, чем файл .py (я просто не удосужился написатьвсе настройки пути), может ли быть проблема с интерпретатором для IronPython, который видит эти объекты как различия, потому что он каким-то образом видит их в другом контексте или области видимости?