私は明白なことを試してみました:、タイプはメンバーのMicrosoft.Scripting.Hosting.ScriptRuntimeSetup、Microsoft.Scriptingのために解決されていない、バージョン= 0.9.0.0:別のAppDomainでIronPythonエンジンをホストする方法は?
var appDomain = AppDomain.CreateDomain("New Domain");
var engine = IronPython.Hosting.Python.CreateEngine(appDomain); // boom!
しかし、私は次のエラーメッセージを取得しています文化=ニュートラル、PublicKeyToken = 31bf3856ad364e35 '。私は新しいコンソールアプリケーションに関連したものをコピーすることによって、最小限の再生プロジェクトを作成しようとしました
:このエラーのためにグーグルで
は実りSOFAR ...
EDIT#1を証明していません
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();
}
}
}
これは期待どおりに機能します。
私はこのエラーが私がコメントした行のうちの1つに関連していると結論づけました:エンジンに追加されたスコープには、ほとんど制御できないオブジェクトが含まれています - プラグインホストへの参照このソフトウェアは、(Autodesk Revit Architecture 2010)を実行するためのものです。
多分、それを渡そうとしているのはエラーを作り出すものですか?
代わりにプロキシを渡す方法はありますか?私は他のAppDomainにプロキシすることはできないんスコープを経由してオブジェクトを渡すまで問題が削れている
:
EDIT#2を(... .NETリモーティングをルックアップする必要があります):異なるAppDomainで実行されているIronPythonインタープリタのスコープに追加されたすべてのオブジェクトは、何らかの形でマーシャリングする必要があります。したがって、MarshalByRefObject
を拡張するか、Serializable
にする必要があります。
これをコンパイル/実行する方法に関する詳細情報を提供できますか? "test.cs"をProgram Filesディレクトリに入れて実行すると、これは2.0.2と2.6 Beta 2に対して動作します。また、.NET 2.0/3.0/3.5または.NET 4に対して実行していますか? –
私はそれがこのアプリケーションドメインで作成するストリームですが、別のアプリケーションドメインでマシンを実行させることをお勧めします... – cRichter