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();
}
}

 

 

 

 

 

posted on 2010-04-18 16:52  风尘仆仆  阅读(1242)  评论(1编辑  收藏  举报