首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ruby gem嵌入到C#项目中并从嵌入的IronRuby脚本中请求它?

如何将ruby gem嵌入到C#项目中并从嵌入的IronRuby脚本中请求它?
EN

Stack Overflow用户
提问于 2012-02-18 02:49:12
回答 3查看 2.6K关注 0票数 16

我有一个嵌入了IronRuby程序的C#项目。该项目(包括我的ruby脚本)在Visual Studio2010中被编译为.exe文件以供分发。我使用了一个与此类似的模式来引导IronRuby脚本:http://pastebin.com/NKes1cyc ( Jimmy Schementi将在这里详细介绍:http://blog.jimmy.schementi.com/2009/12/ironruby-rubyconf-2009-part-35.html)。

我的问题:我想在我的C#程序集中嵌入一个gem (json_pure),然后从ruby脚本调用它。

我找到了一些资源:

Ruby在JRuby中,您可以很容易地将gem打包成jar文件,然后在运行时简单地需要jar文件- ruby工具(位于http://github.com/kumaryu/irpack)能够在嵌入ruby标准库的同时将编译成.exe (我认为它会动态创建和编译C#项目)。但它看起来只是嵌入了预先构建的IronRuby .dlls,而不是ruby .rb文件。如果我能弄清楚如何将Ruby源文件编译成.dll,那么这个工具使用的方法就可以工作。

如何将IronRuby gem嵌入到C#程序集中(或将IronRuby gem编译为.dll)?

编辑:

IronRuby使用中的第472页(“使用外部库”)解释了如何在嵌入式ruby文件中使用标准ruby库。它涉及到将文件夹添加到运行时搜索路径集合,如下所示(为简洁和清楚起见进行了编辑):

ScriptEngine engine = IronRuby.Ruby.CreateEngine();
var searchPaths = engine.GetSearchPaths().Concat(new[] 
{
    "C:\\Program Files (x86)\\IronRuby 1.1\\Lib\\ruby\\1.9.1",
    "C:\\Program Files (x86)\\IronRuby 1.1\\Lib\\ironruby"
});
engine.SetSearchPaths(searchPaths)

这种方法假设主机上安装了IronRuby,但我希望将ruby文件(来自gem)嵌入到程序集中,这样就可以在没有预安装IronRuby的情况下运行。

EDIT 2(进一步研究):

通读上面提到的irpack工具的源代码,我注意到Kumaryu正在通过System.IO.Packaging.Package类将资源嵌入到最终程序集中,然后将包传递到对msbuild的调用中(请参阅https://github.com/kumaryu/irpack/blob/master/lib/irpack/packager.rb)。也许对将文件打包到可执行文件中的进一步研究将导致解决方案。我看到的问题是gem中的ruby文件require其他ruby文件...汇编包中的ruby文件是否可以require同一包中的其他ruby文件?

EDIT 3:

我还没有得到进一步的答案,但我很有兴趣听到任何人的反馈,即使它只是一个链接或关于在哪里查找的建议。我是msbuild的新手,文档非常丰富。最初的网络搜索"msbuild embed zip package“没有显示任何相关的东西。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9333732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档