2010-08-27 79 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