2010-08-27 75 views
1

我想要做的是将正在运行的应用程序的AppDomain引入加载的(Iron)Ruby脚本中。IronRuby,DLR,范围包含

这里是什么,我想实现一个例子:


using System; 
using Microsoft.Scripting; 
using Microsoft.Scripting.Hosting; 
using IronRuby; 

namespace Testing 
{ 
    public class MainClass 
    { 
     public MainClass() { } 
     public override string ToString() { return "Hello World"; } 
     public static void Main() 
     { 
      ScriptEngine engine = IronRuby.Ruby.CreateEngine(); 
      ScriptScope scope = engine.CreateScope(); 
      String code = "p Testing::MainClass.new.to_str"; 
      ScriptSource script = engine.CreateScriptSourceFromString(code, SourceCodeKind.SingleStatement); 
      script.Compile(); 
      script.Execute(scope); 
     } 
    } 
} 

代码不ofcourse工作,因为在AppDomain,或范围(我不知道究竟)在未加载IronRuby引擎。

所以问题是,我该如何使代码工作(打印“Hello World!”)?

回答

0

在这里,我们走了,我们可以用运行时加载的程序集:


using System; 
using System.Reflection; 
using Microsoft.Scripting; 
using Microsoft.Scripting.Hosting; 
using IronRuby; 

namespace Testing 
{ 
    public class MainClass 
    { 
     public MainClass() { } 
     public override string ToString() { return "Hello World"; } 
     public static void Main() 
     { 
      ScriptEngine engine = IronRuby.Ruby.CreateEngine(); 
      engine.Runtime.LoadAssembly(Assembly.LoadFile(Assembly.GetExecutingAssembly().Location)); 
      ScriptScope scope = engine.CreateScope(); 
      String code = "p Testing::MainClass.new"; 
      ScriptSource script = engine.CreateScriptSourceFromString(code, SourceCodeKind.SingleStatement); 
      script.Execute(scope); 
     } 
    } 
}
+0

可以更新这个例子,可以兼容的Windows Phone的Visual Studio 2012?因为当我尝试在C#Windows Phone项目中使用IronRuby时出现错误。 – mcandre 2013-01-26 21:05:04