我有一个嵌入了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“没有显示任何相关的东西。
https://stackoverflow.com/questions/9333732
复制相似问题