Использование ERB в движке IronRuby - PullRequest
0 голосов
/ 03 декабря 2011

Я бы хотел использовать IronRuby с системой ERB для анализа файлов формата .erb и получения выходных данных.

В ruby ​​это будет выглядеть так:

require "erb"
erbContent = "..."
return ERB.new(erbContent,0,"%<>").result

Но это не работает в моем проекте IronRuby. Я получаю исключение по поводу отсутствия файла erb ... так что я думаю, что это проблема библиотек. Затем я запустил свой движок Ruby с путями к моим каталогам IronRuby, который затем выдает другое исключение:

allocator undefined for System::String

1 Ответ

2 голосов
/ 11 января 2012

У меня была похожая проблема, но я предоставлял строку сценарию как локальную переменную через область видимости. Локальной переменной была строка .NET CLR, из-за которой возникла проблема ( см. Здесь ).

Решением для меня было преобразование строки, переданной в ERB.new, в строку Ruby с использованием to_s.

Вот пример (фрагмент Ruby):

require 'erb'

template = ERB.new(template_code.to_s)
template.result(binding)

Часть C #, которая вызвала вышеуказанный скрипт:

var scriptEngine = Ruby.CreateEngine();
var templateCode = "my ERB template code goes here";
// Pass the template code to the Ruby script through a scope
var scope = _scriptEngine.CreateScope(new Dictionary<string, object>() 
                                                  { 
                                                    {"template_code", templateCode}
                                                  });

var result scriptEngine.Execute(_boostrapScript, scope).ToString();

В приведенном выше фрагменте C # _bootstrapScript - это строка, содержащая приведенный выше фрагмент Ruby.

...