2

IronRuby と VS2010 初心者向けの質問:

.net で特定のホイールを再発明するのではなく、C# プロジェクトと既存の RubyGem の間の相互運用性の実現可能性をテストするためにスパイクを実行しようとしています。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 に答える