如何在单独的AppDomain中托管IronPython引擎?我尝试了显而易见的方法:varappDomain=AppDomain.CreateDomain("NewDomain");varengine=IronPython.Hosting.Python.CreateEngine(appDomain);//砰!但我收到以下错误消息:成员“MicrosoftUnresolvedtypefor.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting,Version=0.9.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。谷歌搜索这个错误并没有被证明是富有成果的......编辑#1:我试图通过将相关内容复制到一个新的控制台应用程序中来创建一个最小的重现项目:usingSystem;使用Microsoft.Scripting;命名空间PythonHostSamle{类程序{staticvoidMain(string[]args){AppDomainsandbox=AppDomain.CreateDomain("sandbox");varengine=IronPython.Hosting.Python.CreateEngine(沙箱);varsearchPaths=engine.GetSearchPaths();搜索路径。添加(@"C:Python25Lib");searchPaths.Add(@"C:RevitPythonShell");engine.SetSearchPaths(搜索路径);varscope=engine.CreateScope();//scope.SetVariable("revit",_application);//engine.Runtime.IO.SetOutput(newScriptOutputStream(_instance),Encoding.UTF8);//engine.Runtime.IO.SetErrorOutput(newScriptOutputStream(_instance),Encoding.UTF8);varscript=engine.CreateScriptSourceFromString(“打印‘你好,世界!’”,SourceCodeKind.Statements);脚本。执行(范围);控制台.ReadKey();这按预期工作!因此,我得出结论,我得到的错误与我注释掉的其中一行有关:添加到引擎的范围包含一个我无法控制的对象-对软件运行插件主机的引用(AutodeskRevitArchitecture2010)也许试图通过这是创建错误的原因?有没有办法通过代理?(将不得不查找.NET遥控器...)编辑#2:我已经指出问题是通过不能代理到其他AppDomains的范围传递对象:添加到IronPython解释器范围内的所有对象在不同的??环境中运行AppDomain必须以某种方式以Marshalling结尾,因此必须扩展MarshalByRefObject或可序列化。只需创建您自己的引导类,它将在新的AppDomain中运行并在那里进行IronPyton初始化,它会解决问题吗?以上是C#学习教程:HowtohosttheIronPythonengineinaseparateAppDomain?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
