2009-09-17 4 views
4

J'aimerais utiliser un RubyGem dans mon application C#. J'ai téléchargé IronRuby, mais je ne sais pas trop comment démarrer. Its download inclut ir.exe et inclut des DLL comme IronRuby.dll.Comment puis-je utiliser le code Ruby dans .NET?

Une fois que IronRuby.dll est référencé dans mon projet .NET, comment exposer les objets et les méthodes d'un fichier * .rb à mon code C#?

Merci beaucoup,

Michael

+0

Il est si difficile de trouver documentation sur celui-ci, pas étonnant qu'il vous a confondu. –

Répondre

4

Voici comment vous Interop:

Assurez-vous que vous avez refs à IronRuby, IronRuby.Libraries, Microsoft.Scripting et Microsoft.Scripting.Core

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using IronRuby; 
using IronRuby.Builtins; 
using IronRuby.Runtime; 

namespace ConsoleApplication7 { 
    class Program { 
     static void Main(string[] args) { 
      var runtime = Ruby.CreateRuntime(); 
      var engine = runtime.GetRubyEngine(); 

      engine.Execute("def hello; puts 'hello world'; end"); 

      string s = engine.Execute("hello") as string; 
      Console.WriteLine(s); 
      // outputs "hello world" 

      engine.Execute("class Foo; def bar; puts 'hello from bar'; end; end"); 
      object o = engine.Execute("Foo.new"); 
      var operations = engine.CreateOperations(); 
      string s2 = operations.InvokeMember(o, "bar") as string; 
      Console.WriteLine(s2); 
      // outputs "hello from bar" 

      Console.ReadKey(); 


     } 
    } 
} 

Note, Runtime a un fichier ExecuteFile que vous pouvez utiliser pour exécuter votre fichier.

Pour obtenir les pierres précieuses vont

  1. Assurez-vous d'installer votre bijou à l'aide igem.exe
  2. vous devrez probablement définir quelques pistes de recherche en utilisant Engine.SetSearchPaths
+1

Je pense que je préférerais mettre des pousses de bambou sous mes ongles que de le faire. –

+0

Accordé, c'est poilu, mais faisable. Bien sûr, avec un soutien dynamique, cela deviendra plus facile. –

+0

Merci, Sam - exactement ce que je cherchais. – marclar