2009-09-01 13 views
6

que han intentado lo obvio:¿Cómo alojar un motor IronPython en un dominio de aplicación separado?

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

Pero estoy recibiendo el mensaje de error siguiente: Tipo no se resuelve de este miembro Microsoft.Scripting.Hosting.ScriptRuntimeSetup, Microsoft.Scripting, Version = 0.9.0.0, Cultura = neutral, PublicKeyToken = 31bf3856ad364e35 '.

Google para este error no ha sido fecunda sofar ...

editar # 1:

me trató de crear un proyecto mínimo reproducción copiando el material correspondiente a una nueva aplicación de consola:

using System; 
using Microsoft.Scripting; 

namespace PythonHostSamle 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      AppDomain sandbox = AppDomain.CreateDomain("sandbox"); 
      var engine = IronPython.Hosting.Python.CreateEngine(sandbox); 
      var searchPaths = engine.GetSearchPaths(); 
      searchPaths.Add(@"C:\Python25\Lib"); 
      searchPaths.Add(@"C:\RevitPythonShell"); 
      engine.SetSearchPaths(searchPaths); 
      var scope = engine.CreateScope(); 
      //scope.SetVariable("revit", _application); 
      //engine.Runtime.IO.SetOutput(new ScriptOutputStream(_instance),  Encoding.UTF8); 
      //engine.Runtime.IO.SetErrorOutput(new ScriptOutputStream(_instance),  Encoding.UTF8); 
      var script = engine.CreateScriptSourceFromString("print 'hello, world!'",  SourceCodeKind.Statements); 
      script.Execute(scope); 

      Console.ReadKey(); 
     } 
    } 
} 

¡Esto funciona como se esperaba!

Estoy por lo tanto queda concluir que el error que estoy recibiendo está relacionada con una de las líneas I comentada: El alcance añadido al motor contiene un objeto Tengo poco control sobre - una referencia a una serie plug-in este software está destinado a ejecutarse en (Autodesk Revit Architecture 2010).

Quizás intentar pasar eso es lo que está creando el error?

¿Hay alguna manera de pasar un proxy en su lugar? (Tendrá que mirar hacia arriba remota de .NET ...)

editar # 2:

he recortado el problema a pasar un objeto a través del ámbito que no se puede aproxima al otro dominio de aplicación: Todos los objetos añadidos al alcance de un intérprete de IronPython que se ejecute en un dominio de aplicación diferente tendrán que calcularse de alguna manera y, por lo tanto, deben extenderse MarshalByRefObject o ser Serializable.

+0

¿Puede proporcionar más información sobre cómo está compilando/ejecutando esto? Esto funciona para mí contra 2.0.2 y 2.6 Beta 2 cuando pongo "test.cs" en el directorio Archivos de programa y lo ejecuto. ¿También se está ejecutando en .NET 2.0/3.0/3.5 o .NET 4? –

+0

sugeriría que son las secuencias las que crea en este dominio de la aplicación, pero deja que la máquina se ejecute en otro dominio de aplicación ... – cRichter

Respuesta

2

Simplemente crea tu propia clase de arranque que se ejecutará en un nuevo dominio de aplicación y hará la inicialización de IronPyton allí, ¿resolverá el problema?

+0

Pude reducir el problema a otra cosa: los objetos que quería pasar a el tiempo de ejecución de IronPython donde no era MarshalByRef y ese era el problema ... –

Cuestiones relacionadas