天天看點

.net IronRuby互操作

IronRuby下載下傳位址http://ironruby.codeplex.com/releases/

1.配置 App.config或Web.config增加如下配置節

1 < configSections >

2 < section name ='microsoft.scripting' requirePermission ='false' type ='Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' />

3 </ configSections >

4

5 < microsoft.scripting >

6 < languages >

7 < language extensions ='.rb' displayName ='IronRuby' type ='IronRuby.Runtime.RubyContext, IronRuby, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' names ='IronRuby;Ruby;rb' />

8 </ languages >

9 </ microsoft.scripting >

2.添加引用IronRuby.dll,IronRuby.Libraries.dll,Microsoft.Scripting.dll

3.控制台HelloWorld示例

1 class Program

2 {

3 static void Main( string [] args)

4 {

5 ScriptRuntime runtime = ScriptRuntime.CreateFromConfiguration();

6 ScriptEngine engine = runtime.GetEngine( " Ruby " );

7 engine.Execute( " puts \ " hello world ! \ "" );

8 System.Console.ReadKey();

9 }

10 }

4.解釋IronRuby檔案 增加檔案Test.rb(存為UTF-8編碼格式), .net下建立Test類并調用執行個體方法,顯示相加結果3。

1 class Test

2 def add a, b

3 puts a + b

4 end

5 end

代碼

class Program

{

static void Main( string [] args)

{

ScriptRuntime runtime = ScriptRuntime.CreateFromConfiguration();

ScriptEngine engine = runtime.GetEngine( " Ruby " );

ScriptSource source = engine.CreateScriptSourceFromFile( " Test.rb " , Encoding.UTF8);

source.Execute();

var code = String.Format( " {0}.new.method :{1} " , " Test " , " add " );

var action = engine.CreateScriptSourceFromString(code).Execute();

var result = engine.Operations.Call(action, 1 , 2 );

System.Console.ReadKey();

}

}

在.net 4.0 條件下上例中調用代碼可直接替換為

  dynamic test = engine.Execute("Test.new");

      test.add(1, 2);

參見http://ironruby.net/Documentation/.NET/Hosting 該例中使用了ExcuteFile方法,該方法不支援UTF-8格式檔案。

5.IronRuby中調用.net對象,修改Test.rb檔案

class Test

def add a, b

result = a + b

MessageBox.Show(result.to_s)

end

end

代碼

class Program

{

static void Main( string [] args)

{

ScriptRuntime runtime = ScriptRuntime.CreateFromConfiguration();

ScriptEngine engine = runtime.GetEngine( " Ruby " );

ScriptSource source = engine.CreateScriptSourceFromFile( " Test.rb " , Encoding.UTF8);

source.Execute();

engine.Execute( " load_assembly \ " System.Windows.Forms\ "" );

engine.Execute( " include System::Windows::Forms " );

dynamic test = engine.Execute( " Test.new " );

test.add( 1 , 2 );

System.Console.ReadKey();

}

}

 6.Web調用,建立web項目,根目錄建立檔案Test.rb

class Test

def sayHello

HttpContext.Current.Response.Write( " <script type='text/javascript'>alert('hello world!');</script> " );

end

end

代碼

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load( object sender, EventArgs e)

{

ScriptRuntime runtime = ScriptRuntime.CreateFromConfiguration();

ScriptEngine engine = runtime.GetEngine( " Ruby " );

ScriptSource source = engine.CreateScriptSourceFromFile(Server.MapPath( " Test.rb " ), Encoding.UTF8);

source.Execute();

engine.Execute( " load_assembly \ " System.Web\ "" );

engine.Execute( " include System::Web " );

dynamic test = engine.Execute( " Test.new " );

test.sayHello();

}

}

轉載于:https://www.cnblogs.com/haojuandon/archive/2010/04/18/1714796.html

繼續閱讀