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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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();
}
}