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.
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? –
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