【问题标题】:Why do 'requires' statements fail when loading (iron)ruby script via a C# program?为什么通过 C# 程序加载 (iron)ruby 脚本时“requires”语句会失败?
【发布时间】:2010-03-03 00:10:45
【问题描述】:

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​​ 运行时时只需要将一些附加信息(路径等)传递给它,并且真的希望这不是某种限制,因为那会让我难过。

【问题讨论】:

    标签: c# visual-studio-2010 rubygems .net-4.0 ironruby


    【解决方案1】:

    简短回答:是的,这将按照您的意愿工作。
    您需要使用引擎的 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();
    

    【讨论】:

    • 太棒了。我希望是这样的。
    • 太棒了!很高兴它对你有用。如果有机会,请注册 IronRuby 邮件列表,那里有很多非常聪明和乐于助人的人:rubyforge.org/mailman/listinfo/ironruby-core
    • 这正是我所需要的。我正在使用带有"require 'csv'" 的ruby 脚本,在安装IronRuby 工具后(我以前只使用过IronRuby NuGet 包),我能够将lib 文件夹复制出来并将其包含在我的项目中并获得相同的结果。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多