IronRuby和VS2010 noob问题:
我正在努力测试C#项目和现有RubyGem之间互操作的可行性,而不是重新发明.net中的特定轮子。我已经下载并安装了IronRuby和RubyGems包,以及我最终想要使用的gem。
运行.rb文件或在iirb Ruby控制台中工作没有问题。我可以加载RubyGems包和gem本身并使用它,所以,至少对于那个用例,我的环境设置正确。
但是,当我尝试在C#(4.0)控制台应用程序中执行相同类型的操作时,它会抱怨第一行:
require 'RubyGems'
错误:
no such file to load -- rubygems
我的控制台应用程序如下所示:
using System;
using IronRuby;
namespace RubyInteropSpike
{
class Program
{
static void Main(string[] args)
{
var runtime = Ruby.CreateRuntime();
var scope = runtime.ExecuteFile("test.rb");
Console.ReadKey();
}
}
}
删除依赖项并只是做一些基本的自包含Ruby工作正常,但包括任何类型的'requires'语句似乎导致它失败。
我希望我在创建它时只需要将一些额外的信息(路径等)传递给ruby运行时,并且真的希望这不是某种限制,因为这会让我感到难过。
答案 0 :(得分:6)
简短回答:是的,这将按照你想要的方式工作。
你需要使用引擎的SetSearchPaths方法来做你想做的事。
更完整的例子
(假设您将IronRuby加载到C:\ IronRubyRC2作为根安装目录)
var engine = IronRuby.Ruby.CreateEngine();
engine.SetSearchPaths(new[] {
@"C:\IronRubyRC2\Lib\ironruby",
@"C:\IronRubyRC2\Lib\ruby\1.8",
@"C:\IronRubyRC2\Lib\ruby\site_ruby\1.8"
});
engine.Execute("require 'rubygems'"); // without SetSearchPaths, you get a LoadError
/*
engine.Execute("require 'restclient'"); // install through igem, then check with igem list
engine.Execute("puts RestClient.get('http://localhost/').body");
*/
Console.ReadKey();