在C#.NET中调用Ruby或Python API

我有许多我在Ruby和Python中开发的API / Classes,我想在我的.NET应用程序中使用它们。 是否可以在C#中实例化Ruby或Python对象并调用其方法?

似乎像IronPython这样的图书馆就是这样做的。 这意味着,他们允许Python使用.NET对象,但不是我正在寻找的这个的倒数…我在这里遗漏了什么?

有任何想法吗?

这是动态语言运行时应该做的两件事之一:每个人都认为DLR仅适用于语言实现者,以便更容易在CLI上实现动态语言。 但是,它也适用于应用程序编写者,以便更容易在其应用程序中托管动态语言。

在DLR之前,每种语言都有自己的托管API。 现在,DLR有一个标准化的托管规范 ,对每种语言都是一样的,并且在C#4和VB.NET 10中支持动态类型对象,它比以往更容易:

// MethodMissingDemo.cs using System; using IronRuby; class Program { static void Main() { var rubyEngine = Ruby.CreateEngine(); rubyEngine.ExecuteFile("method_missing_demo.rb"); dynamic globals = rubyEngine.Runtime.Globals; dynamic methodMissingDemo = globals.MethodMissingDemo.@new(); Console.WriteLine(methodMissingDemo.HelloDynamicWorld()); methodMissingDemo.print_all(args); } } # method_missing_demo.rb class MethodMissingDemo def print_all(args) args.map {|arg| puts arg} end def method_missing(name, *args) name.to_s.gsub(/([[:lower:]\d])([[:upper:]])/,'\1 \2') end end 

在这里你可以看到在各个方向传递的东西。 C#代码在Ruby对象上调用一个甚至不存在的方法 ,Ruby代码在.NET数组上迭代并将其内容打印到控制台。

如果您可以等待C#4.0(您现在可以使用测试版),它将带有“dynamic”关键字,您可以按照此处的说明调用IronRuby或IronPython代码。

IronRuby和IronPython都允许您调用Ruby和Python本机模块,函数和类。 两者都支持.NET中的或多或少的一流语言,特别是在DLR(动态语言运行时)下。

我已经看到了从c#调用Ruby / Python的方法。 但反过来说更容易。