2

IronRuby 和 VS2010 菜鸟问题:

我正在尝试做一个尖峰来测试 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​​ 运行时将一些额外的信息(路径等)传递给它,并且真的希望这不是某种限制,因为那会让我难过。

4

1 回答 1

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

于 2010-03-03T05:43:50.547 回答