У меня была похожая проблема, но я предоставлял строку сценарию как локальную переменную через область видимости.
Локальной переменной была строка .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.