2009-09-01 8 views
6

Ich habe die offensichtlich versucht:Wie hostet man eine IronPython-Engine in einer separaten AppDomain?

var appDomain = AppDomain.CreateDomain("New Domain"); 
var engine = IronPython.Hosting.Python.CreateEngine(appDomain); // boom! 

Aber ich folgende Fehlermeldung erhalten: Typ wird nicht aufgelöst für Mitglieder Microsoft.Scripting.Hosting.ScriptRuntimeSetup, Microsoft.Scripting, Version = 0.9.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35 '.

für diesen Fehler Googeln hat nicht fruchtbar sofar bewiesen ...

EDIT # 1:

ich durch Kopieren der relevanten Sachen auf eine neue Konsole-Anwendung eine minimale Wiedergabe Projekt zu erstellen versucht:

Dies funktioniert wie erwartet!

Ich verließ also zu dem Schluss, dass der Fehler I bin immer im Zusammenhang mit einer der Linien kommentierte ich aus: Der Umfang zum Motor hinzugefügt enthält ein Objekt Ich habe nur wenig Kontrolle über - einen Verweis auf eine Plugin-Host Diese Software soll ausgeführt werden (Autodesk Revit Architecture 2010).

Vielleicht versucht zu übergeben, ist das, was den Fehler verursacht?

Gibt es eine Möglichkeit, stattdessen einen Proxy zu übergeben? (Müssen .NET Remoting nachschlagen ...)

EDIT # 2:

ich das Problem schnitzte haben unten ein Objekt über den Umfang vorbei, die auf der anderen AppDomain ist nicht proxied werden: Alle Objekte, die dem Bereich eines IronPython-Interpreters hinzugefügt werden, der in einer anderen AppDomain ausgeführt wird, müssen irgendwie gemarshallt werden und müssen daher entweder MarshalByRefObject oder Serializable sein.

+0

Können Sie weitere Informationen zum Kompilieren/Ausführen dieser Informationen bereitstellen? Dies funktioniert für mich gegen 2.0.2 und 2.6 Beta 2, wenn ich "test.cs" in das Verzeichnis Programme und führen Sie es ein. Laufen Sie auch gegen .NET 2.0/3.0/3.5 oder .NET 4? –

+0

Ich würde vorschlagen, dass es die Streams sind, die Sie in dieser App-Domäne erstellen, aber den Computer in einer anderen App-Domäne ausführen lassen ... – cRichter

Antwort

2

Erstellen Sie einfach Ihre eigene Bootstrapping-Klasse, die in einer neuen AppDomain ausgeführt wird und wird die Initialisierung von IronPyton dort tun, wird es das Problem lösen?

+0

Ich konnte das Problem auf etwas anderes reduzieren - die Objekte, die ich weitergeben wollte die IronPython-Laufzeit, wo nicht MarshalByRef und das war das Problem ... –