Как встроить драгоценный камень ruby ​​в проект C # и потребовать его от встроенного скрипта IronRuby?

У меня есть проект C #, в который я встроил программу IronRuby. Проект (включая мой скрипт ruby) компилируется в файл .exe в Visual Studio 2010 для распространения. Я использую шаблон, похожий на этот, для начальной загрузки скрипта IronRuby: http://pastebin.com/NKes1cyc (и Джимми Шементи подробно описывает здесь: http: //blog.jimmy .schementi.com / 2009/12 / ironruby-rubyconf-2009-part-35.html ).

Моя проблема: я хотел бы встроить гем (json_pure) в свою сборку C # и вызвать его из скрипта ruby.

Некоторые ресурсы, которые я нашел:

  1. В JRuby вы можете легко упаковать драгоценный камень в файл jar, а затем просто запросить файл jar во время выполнения - http://blog.nicksieger.com/articles / 2009/01/10 / jruby-1-1-6-gems-in-a-jar

  2. Инструмент irpack (на http://github.com/kumaryu/irpack ) поддерживает компиляции Ruby в .exe (я думаю, что он динамически создает и компилирует проект C #) при встраивании стандартной библиотеки ruby. Но похоже, что это только встраивание предварительно созданных библиотек IronRuby .dll, а не рубиновых файлов .rb. Подход, который использует этот инструмент, работал бы, если бы я мог понять, как скомпилировать исходные файлы Ruby в .dll.

Как мне встроить гем IronRuby в сборку C # (или скомпилировать гем IronRuby в .dll)?

РЕДАКТИРОВАТЬ:

Стр. 472 из IronRuby в действии («Использование внешнего Библиотеки ») объясняет, как требовать стандартные библиотеки 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 ​​(из гема) в сборку, чтобы ее можно было запустить без предварительно установленного IronRuby.

РЕДАКТИРОВАТЬ 2 (дальнейшее исследование):

Читая исходный код упомянутого выше инструмента irpack, я заметил, что Кумарью встраивает ресурсы в окончательную сборку через System.IO.Packaging.Класс пакета, а затем передача пакета в вызов msbuild (см. https://github.com/kumaryu/irpack/blob/master/lib/irpack/packager.rb ). Возможно, некоторые дальнейшие исследования упаковки файлов в исполняемый файл приведут к решению. Проблема, которую я вижу, заключается в том, что файлы ruby ​​в геме требуют других файлов ruby ​​... может ли файл ruby ​​в пакете сборки требовать других файлов ruby ​​в том же пакете?

РЕДАКТИРОВАТЬ 3:

Я еще не получил ответа, но мне было бы интересно услышать чей-либо отзыв, даже если это просто ссылка или предложение о том, где искать. Я новичок в msbuild, и документация довольно обширна. Первоначальный поиск в Интернете по запросу «msbuild embed zip package» не выявил ничего значимого.

16
задан Roy Tinker 24 February 2012 в 04:36
поделиться