Roy*_*ker 16 .net c# msbuild ironruby .net-assembly
我有一个C#项目,其中嵌入了一个IronRuby程序.该项目(包括我的ruby脚本)被编译为Visual Studio 2010中的.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脚本中调用它.
我找到的一些资源:
在JRuby中,您可以轻松地将gem打包到jar文件中,然后在运行时只需要jar文件 - http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems -在一个罐子里
irpack工具(http://github.com/kumaryu/irpack)能够在嵌入ruby标准库的同时将Ruby编译为.exe(我认为它动态创建并编译C#项目).但看起来它只是嵌入了预先构建的IronRuby .dll,而不是ruby .rb文件.如果我能弄清楚如何将Ruby源文件编译成.dll,那么这个工具使用的方法会起作用.
如何将IronRuby gem嵌入到C#程序集中(或将IronRuby gem编译为.dll)?
编辑:
IronRuby In Action("使用外部库")的第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)
Run Code Online (Sandbox Code Playgroud)
这种方法假设主机安装了IronRuby,但是我想将ruby文件(从gem中)嵌入到程序集中,这样它就可以在没有预先安装IronRuby的情况下运行.
编辑2(进一步研究):
阅读上面引用的irpack工具的源代码,我注意到Kumaryu通过System.IO.Packaging.Package类将资源嵌入到最终的程序集中,然后将包传递给对msbuild的调用(参见https:// github.com/kumaryu/irpack/blob/master/lib/irpack/packager.rb).也许对将文件打包成可执行文件的进一步研究将导致解决方案.我看到的问题是gem中的requireruby文件其他ruby文件...可以在程序集包中的requireruby文件中同一个包中的其他ruby文件吗?
编辑3:
我还没有得到任何答案,但我有兴趣听到任何人的反馈,即使它只是一个关于在哪里看的链接或建议.我是msbuild的新手,而且文档非常庞大.对"msbuild embed zip package"的初始网络搜索没有透露任何相关内容.
| 归档时间: |
|
| 查看次数: |
2328 次 |
| 最近记录: |