2009-09-01 14 views
6

Bir IronPython motorunu ayrı bir AppDomain'de barındırmak nasıl?

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

Ama şu hata mesajı alıyorum: Tipi üyesi için çözülmezse 'Microsoft.Scripting.Hosting.ScriptRuntimeSetup, Microsoft.Scripting, Sürüm = 0.9.0.0, Culture

ben bariz denedi = nötr, PublicKeyToken = 31bf3856ad364e35 '.

Googling bu hata için olmadığı görülmüştür verimli Sofar ...

DÜZENLEME # 1: Yeni bir konsol uygulaması ile ilgili şeyler kopyalayarak minimal çoğaltma projesi oluşturmayı denedim

:

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(); 
     } 
    } 
} 
beklendiği gibi çalışır

!

ben böylece ben dışarı yorumladı alıyorum hata hatlarının biri ile ilişkili olduğunu sonucuna kaldım: kapsam motoru ben üzerinde çok az kontrole sahip bir nesne içeriyor eklenen - bir eklenti ana bilgisayara bir referans Bu yazılımın çalışması için tasarlanmıştır (Autodesk Revit Architecture 2010).

Belki de bu hata iletmeye çalışıyor ne hata yaratıyor?

Bunun yerine bir proxy iletmenin bir yolu var mı? (... .NET remoting bakmak gerekecektir)

DÜZENLEME # 2: Diğer uygulama etki alanı için proxy uygulanamıyor gelmez kapsam aracılığıyla bir nesne geçirerek aşağı sorunu whittled gelmiş

: farklı AppDomain içinde çalışan bir IronPython tercüman kapsamına eklenen tüm nesneler bir şekilde konmasını sahip olacak ve böylece ya MarshalByRefObject uzatmak veya Serializable olmalıdır.

+0

Bunu nasıl derlediğiniz/çalıştırdığınız hakkında daha fazla bilgi verebilir misiniz? Bu, Program Files dizinine "test.cs" yazıp çalıştırdığımda 2.0.2 ve 2.6 Beta 2'ye karşı çalışır. Ayrıca, .NET 2.0/3.0/3.5 veya .NET 4 karşı mı çalışıyorsunuz? –

+0

Bu uygulama etki alanında yarattığınız, ancak başka bir uygulama etki alanında çalışan makinenin çalışmasına izin verdiğinizi düşündürüyorum. – cRichter

cevap

2

Sadece yeni bir AppDomain'de çalışacak ve orada IronPyton'u başlatacak olan kendi boot sınıfını yaratın, prob'u çözecek mi?

+0

Sorunu başka bir şeye indirgemeyi başardım. MarshalByRef'in olmadığı IronPython çalışma zamanı ve sorun buydu ... –

İlgili konular