Ich versuche, IronPython als Vermittler zwischen einer C# -GUI und einigen C# -Bibliotheken zu verwenden, so dass es nach der Kompilierungszeit geschrieben werden kann.C#/IronPython Interop mit freigegebener C# -Klassenbibliothek
Ich habe eine Klassenbibliothek DLL, die sowohl von der GUI und der Python verwendet wird, und ist etwas entlang der Linien von dieser:
namespace MyLib
{
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
this.Name = name;
}
}
}
Der Ironpython-Code wird wie folgt dar:
import clr
clr.AddReferenceToFile(r"MyLib.dll")
from MyLib import MyClass
ReturnObject = MyClass("Test")
dann wird in C# würde ich es nennen wie folgt:
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 ")
als ich dieses letzte Stück Code nennen, source.Ex ecute (scope) läuft kehrt erfolgreich, aber wenn ich den GetVariable Anruf versuchen, werfen sie die folgende Ausnahme
Microsoft.Scripting.ArgumentTypeException: expected MyClass , got MyClass
So können Sie sehen, dass die Klassennamen sind genau die gleichen, aber aus irgendeinem Grund es denkt, sie sind anders.
Die DLL befindet sich in einem anderen Verzeichnis als die .py-Datei (ich habe mir einfach nicht die Mühe gemacht, alle Pfad-Setup-Sachen zu schreiben), könnte es sein, dass es ein Problem mit dem Interpreter für IronPython gibt Unterschied, weil es sie irgendwie in einem anderen Kontext oder Bereich sieht?