Вопрос

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

В Руби это было бы похоже на:

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

Но это просто не работает в моем проекте Ironruby. Я получаю исключение о том, что файл ERB отсутствует ... так что я думаю, что это проблема библиотек. Затем я инициировал свой рубиновый двигатель с путями к моим каталогам Ironruby, которые затем бросают другое исключение:

allocator undefined for System::String
Это было полезно?

Решение

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

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

Вот пример (рубиновый фрагмент):

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 - это строка, которая содержит рубиновый фрагмент выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top